canvas2Draw - 如何将视图 class 连接到 canvas2

canvas2Draw - how to connect view class to the canvas2

full code 我是 android 工作室的新人,我在绘画方面遇到了问题。 执行后它不起作用

public class 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);
}

}

2.

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

因此您可以在构造函数中创建一个 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 问题,您可以使用工具/布局检查器,这有助于确定原因(尺寸不正确)。 这是关于 measuring custom views.

的一个很好的教程

quickest 修复是使用 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);