当前位置: 首页 > 知识库问答 >
问题:

在填充的android画布上绘制透明圆圈

居星阑
2023-03-14

我正在尝试做一些非常简单的事情(见上文)。我希望画布的所有像素都是纯色,除了填充中心圆圈的像素。我已经阅读了数百篇关于这个主题的stack overflow帖子,并尝试了数百种方法,包括设置porterduff.mode。下面是MyView extends视图的当前onDraw():

  protected void onDraw(Canvas canvas) {
    int w = canvas.getWidth();
    int h = canvas.getHeight();

    Paint framePaint = new Paint();
    framePaint.setStyle(Paint.Style.FILL);
    framePaint.setColor(Color.BLUE);
    canvas.drawRect(0, 0, w, h, framePaint);

    Paint transparentPaint = new Paint();
    transparentPaint.setColor(Color.TRANSPARENT);
    transparentPaint.setAntiAlias(true);
    canvas.drawCircle(w / 2, h / 2, (w + h) / 4, transparentPaint);
  }

我是不是误解了什么,为什么我不能用透明油漆在现有的像素上油漆。当我这样做时,像素保持不变。当我使用PorterDuff时,像素会变成黑色。请帮忙。

共有1个答案

虞华彩
2023-03-14

试试这个:

public class TransparentCircle extends View {

    Bitmap bm;
    Canvas cv;
    Paint eraser;

    public TransparentCircle(Context context) {
        super(context);
        Init();
    }

    public TransparentCircle(Context context, AttributeSet attrs) {
        super(context, attrs);
        Init();
    }

    public TransparentCircle(Context context, AttributeSet attrs,
                             int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        Init();
    }

    private void Init(){

        eraser = new Paint();
        eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        eraser.setAntiAlias(true);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {

        if (w != oldw || h != oldh) {
            bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
            cv = new Canvas(bm);
        }
        super.onSizeChanged(w, h, oldw, oldh);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        int w = getWidth();
        int h = getHeight();
        int radius = w > h ? h / 2 : w / 2;

        bm.eraseColor(Color.TRANSPARENT);
        cv.drawColor(Color.BLUE);
        cv.drawCircle(w / 2, h / 2, radius, eraser);
        canvas.drawBitmap(bm, 0, 0, null);
        super.onDraw(canvas);
    }
}
 类似资料:
  • 请帮助我在Android SDK上实现同样的结果。

  • 本文向大家介绍在HTML5画布上绘制一个填充有随机颜色正方形的圆圈,包括了在HTML5画布上绘制一个填充有随机颜色正方形的圆圈的使用技巧和注意事项,需要的朋友参考一下 当我们需要在浏览器中用1x1像素填充所有不同颜色的圆时,我们可以使用以下简单方法:  在画布上以200x200网格绘制具有某些随机颜色的所有像素  更改复合模式  在顶部绘制圆 让我们看一个例子:

  • 我想用javascript在响应画布上画一个圆圈。我得到了画布的宽度和高度,但由于div标签的宽度和高度%,我能够正确地画出圆圈。div标记的宽度和高度以%为单位,因为我想在单个页面上显示5个画布。是否有其他方法可以在一页上放置5块画布,并使用画布的高度和宽度在每个画布上画一个圆圈?还有一件事,我不想要绝对位置,因为根据浏览器的宽度,我想要改变画布的位置 图片:192.168。10.29/1.巴布

  • 问题内容: 我想按画布画圆。这是我的代码: [MyActivity.java]: [View.java]: 所以我只有黑屏,没有圆圈。为什么不起作用?如何解决? 问题答案: 您可以覆盖视图的onDraw方法并绘制圆。 有关绘制自定义视图的更好参考,请查看官方的Android文档。 http://developer.android.com/training/custom-views/custom-

  • 问题内容: 我发现只能填充矩形,而没有圆角,该怎么办? 问题答案: HTML5画布没有提供绘制带有圆角的矩形的方法。 如何使用和方法? 您也可以使用方法代替方法。

  • 问题内容: 我正在尝试在Android的Canvas对象上绘制九个补丁。看起来很奇怪的是,尽管我使用draw9patch工具生成了我的九个补丁,但NinePatch的构造函数需要一个额外的字节数组“ chunk”来构造这九个补丁。 为什么这样不简单?什么是“块”?如果您自己完成此操作,您是如何进行的? 任何帮助表示赞赏。 问题答案: 您可以通过以下方式轻松实现: