Java 如何访问onDraw方法之外的画布宽度
我有以下代码:Java 如何访问onDraw方法之外的画布宽度,java,android,canvas,initialization,width,Java,Android,Canvas,Initialization,Width,我有以下代码: Bitmap right1; public TicTacToe(Context context) { super(context); right1 = BitmapFactory.decodeResource(getResources(), R.drawable.plus); int width = right1.getWidth(); int height = right1.getHeight(); } @Override protected
Bitmap right1;
public TicTacToe(Context context) {
super(context);
right1 = BitmapFactory.decodeResource(getResources(), R.drawable.plus);
int width = right1.getWidth();
int height = right1.getHeight();
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
right1 = Bitmap.createScaledBitmap(right1, canvas.getWidth()/3, canvas.getWidth()/3, false);
canvas.drawBitmap(right1, (canvas.getWidth() - (canvas.getWidth()/3)), 0, null);
invalidate();
}
我想根据画布的宽度重新缩放名为“right1”的位图。我成功地做到了这一点,但完成这一点的代码行是onDraw方法下的第三行。这行代码的问题是,当我只想运行它一次时,它会不断循环。理想情况下,我希望将这行代码放在TicTacToe方法中,但我不确定如何在TicTacToe方法中初始化画布,以便获得画布宽度。您不需要在构造函数中执行这些操作,只需在onDraw()方法中添加条件即可
这会使它变得更好,但是代码会一直不断地检查这个if语句。因此,最好在构造函数中初始化它一次,并且永远不必在onDraw方法中检查它,因为onDraw()在无限调用中,所以一旦绘制了,就不要调用invalidate()方法,所以我更新了代码,并将invalide()调用放在if()块中,现在它只调用一次
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
if(right1==null){
right1 = Bitmap.createScaledBitmap(right1, canvas.getWidth() / 3, canvas.getWidth() / 3, false);
canvas.drawBitmap(right1, (canvas.getWidth() - (canvas.getWidth() / 3)), 0, null);
invalidate();
}
}