Canvas.drawRectの座標指定について
Viewを継承したカスタムViewで矩形を描画しました。
onDrawに渡されるcanvasを使った描画と、カスタムView内で別途用意したCanvasへの描画で違いが生じました。
onDrawに渡されるcanvasへの描画で矩形が表示されないのは、指定した座標のleftやtopが、rightやbottomより大きいせい(左から順番に座標を指定していないせい)だというのは分かります。
一方で、同じように左から順番に指定していないにもかかわらず、カスタムView内で用意したCanvasへのdrawRectでは描画できてしまっています。
この違いはなぜ生じるのでしょうか?
以下のコードで描画しています。
public class DrawRectView extends View{
private Paint paint;
private Bitmap cacheBitmap;
private Canvas cacheCanvas;
public DrawRectView(Context context) {
this(context, null);
}
public DrawRectView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DrawRectView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public DrawRectView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init(){
paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
cacheBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas(cacheBitmap);
}
@Override
protected void onDraw(Canvas canvas) {
// 描画される
canvas.drawRect(100, 100, 200, 200, paint);
// 描画されない→矩形の左から座標をしていないため?
canvas.drawRect(100, 100, 50, 50, paint);
// 描画される
cacheCanvas.drawRect(300, 300, 400, 400, paint);
// 描画される→なぜ?
cacheCanvas.drawRect(300, 300, 250, 250, paint);
canvas.drawBitmap(cacheBitmap, 0, 0, paint);
}
}