如何在视图中放置以编程方式生成的位图?

Posted

技术标签:

【中文标题】如何在视图中放置以编程方式生成的位图?【英文标题】:How do I place a programatically generated bitmap in a View? 【发布时间】:2017-02-07 21:28:19 【问题描述】:

我已经像这样以编程方式生成了一个圆形位图:

private Bitmap drawDotCircle() 
        int circleSize = 100;
        circleBitmap = Bitmap.createBitmap(
                circleSize,
                circleSize,
                Bitmap.Config.ARGB_8888
        );

        canvas = new Canvas(circleBitmap);
        CanvasRadius = Math.min(canvas.getWidth(), canvas.getHeight() / 2);

        // Create a Paint object used to paint the circle
        paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.RED);
        paint.setAntiAlias(true);

        canvas.drawCircle(
                canvas.getWidth() / 2,
                canvas.getHeight() / 2,
                CanvasRadius - CanvasPadding,
                paint
        );

        return circleBitmap;
    

我想把它放在我计算出的绝对 X 和 Y 上;让我们假设它是屏幕的绝对中心,如下所示:

int dotX =getResources().getDisplayMetrics().widthPixels / 2;
int dotY = getResources().getDisplayMetrics().heightPixels / 2;

如何确保圆在视图中居中?我试过下面的代码,但由于某种原因圆圈总是偏离中心:

        RelativeLayout.LayoutParams layoutParams =
                new RelativeLayout.LayoutParams(circleDot.getHeight(), circleDot.getHeight());

// Setting position of our ImageView
        layoutParams.leftMargin = dotX;
        layoutParams.topMargin = dotY;

// Finally Adding the imageView to RelativeLayout and its position
        relativeLayout.addView(dotView, layoutParams);

【问题讨论】:

【参考方案1】:

leftMargin 应该是 dotX - imageWidth/2 并且 topMargin 应该是 dotY - imageHeight/2

试试看

【讨论】:

这仍然不能使图像居中。这是使用我最初的 x 和 y 计算定位的红点的屏幕截图:i.imgur.com/t8VGB7c.jpg,然后是您建议的计算的屏幕截图:i.imgur.com/V9X2zdW.jpg 在这两种情况下,点都偏离中心

以上是关于如何在视图中放置以编程方式生成的位图?的主要内容,如果未能解决你的问题,请参考以下文章

如何向放置在 UIStackView 中的以编程方式创建的 UIButton 添加约束

如何移动界面生成器放置的文本字段和按钮

如何以编程方式在自定义列表视图中进行更改以立即反映?

如何以编程方式将 9-patch 图像重新应用到 ImageView?

如何使以编程方式生成的子视图符合超级视图(iOS)的边界?

以编程方式将控件放置在 div 中