Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问onDraw方法之外的画布宽度_Java_Android_Canvas_Initialization_Width - Fatal编程技术网

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();
        }
    }