首页 > 解决方案 > canvas2Draw - 如何将视图类连接到 canvas2

问题描述

完整代码我是android studio 的新手,我在绘图时遇到问题。执行后它不起作用

公共类 MainActivity 扩展 AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View eissa=new eissa(this);
    setContentView(eissa);
}

}

class eissa extends View {
private Canvas canvas2;
private Bitmap backingbitmap;
public eissa(Context context) {
        super(context);
  backingbitmap=Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888);
    canvas2= new Canvas(backingbitmap);
}



   @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(0,50,100,null);
    canvas2.drawCircle(0,50,100,null);
    canvas.drawBitmap(backingbitmap,0,0,null);
}

}

标签: javaandroidandroid-canvas

解决方案


2.

canvas.drawCircle() 存在问题,因为没有 Paint 参数(最后一个)。drawCircle 文档说:“油漆:用于绘制圆圈的油漆此值不能为空。”

因此,您可以在构造函数中创建一个 Paint 以传递给 drawCircle 方法:

class eissa extends View {
    private Canvas canvas2;
    private Bitmap backingbitmap;
    Paint viewPaint;

    public eissa(Context context) {
        super(context);
        backingbitmap=Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888);
        canvas2= new Canvas(backingbitmap);
        viewPaint = new Paint();
        viewPaint.setColor(0xFFFF0000); // set your desired color here context.getColor(R.color....);
        viewPaint.setStrokeWidth(4);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(0, 50, 100, viewPaint);
        canvas2.drawCircle(0, 50, 100, viewPaint);
        canvas.drawBitmap(backingbitmap, 0, 0, null);
    }
}

1.

视图的尺寸未在任何地方指定,导致平台使用默认的 LayoutParams,其 layout_width 和 layout_height 等于 WRAP_CONTENT,因此视图不可见。要解决 ui 问题,您可以使用工具/布局检查器来帮助确定原因(尺寸不正确)。这是一个关于测量自定义视图的好教程。

最快的解决方法是在 setContentView 中使用 LayoutParams 指定尺寸:

// replace setContentView() in onCreate() with this
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                     ViewGroup.LayoutParams.MATCH_PARENT); 
setContentView(eissa, lp);

推荐阅读