Search code examples
javaandroidandroid-canvas

canvas2Draw - how to connect view class to the canvas2


full code I'm new in android studio and I'm having problem with drawing. Upon execution it does not work

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

}


Solution

  • 2.

    There is a problem with the canvas.drawCircle() because there is no Paint argument (last one). The drawCircle doc says : "Paint: The paint used to draw the circle This value cannot be null."

    So you can create a Paint in the constructor to pass to the drawCircle methods:

    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.

    The view's dimensions are not specified anywhere causing the platform to use the default LayoutParams which have the layout_width and layout_height equal to WRAP_CONTENT so the view is not visible. To address ui issues you can use Tools / Layout inspector which can help identify the cause (incorrect dimensions). Here is a good tutorial about measuring custom views.

    The quickest fix would be to specify dimensions using LayoutParams in setContentView:

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