Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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 Android应用程序因简单的绘制到画布、显示位图而崩溃_Java_Android_Canvas_Bitmap - Fatal编程技术网

Java Android应用程序因简单的绘制到画布、显示位图而崩溃

Java Android应用程序因简单的绘制到画布、显示位图而崩溃,java,android,canvas,bitmap,Java,Android,Canvas,Bitmap,有人知道为什么上面的Android Studio代码片段会导致应用程序不断崩溃吗?我是Android Studio的新手,我想在做任何事情之前先习惯于构建矩形和形状,但似乎我在这方面也有困难 显示绘制值不大于0的位图时出错,但问题是在onClick中使用打印功能,从窗口或imageView中获取高度或宽度后,返回的值大于0,所以我不明白。在绘制视图之前,您在onCreate方法中获得高度和宽度,因此返回高度0,宽度0,因为android系统不知道视图的确切宽度和高度。您可以使用一些方法,如pos

有人知道为什么上面的Android Studio代码片段会导致应用程序不断崩溃吗?我是Android Studio的新手,我想在做任何事情之前先习惯于构建矩形和形状,但似乎我在这方面也有困难


显示绘制值不大于0的位图时出错,但问题是在onClick中使用打印功能,从窗口或imageView中获取高度或宽度后,返回的值大于0,所以我不明白。

在绘制视图之前,您在onCreate方法中获得高度和宽度,因此返回高度0,宽度0,因为android系统不知道视图的确切宽度和高度。您可以使用一些方法,如post(Runnable)来了解视图是否已绘制。修改代码如下

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = findViewById(R.id.button);
    button.setOnClickListener(this);

    int height = this.getWindow().getDecorView().getHeight();
    int width = this.getWindow().getDecorView().getWidth();
    bitmap = Bitmap.createBitmap(height, width, Bitmap.Config.ARGB_8888 );
    canvas = new Canvas(bitmap);

    imageView = findViewById(R.id.imageView);
}

@Override
public void onClick(View v) {

    if (v.getId() == R.id.button){

        canvas.drawColor(Color.RED);
    }

    imageView.setImageBitmap(bitmap);
}
}

请显示您得到的错误(例如logcat…@JonGoodwin,显示绘制值不大于0的位图的错误,但问题是在onClick中使用打印功能,从窗口或imageView中获取高度或宽度后,返回的值大于0,因此我不理解人们试图关闭该问题(有充分的理由).... “寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题说明的问题对其他读者没有用”请学习如何提问。同时展示您已尝试如何解决问题。你会因此得到一枚徽章;O)
View view = this.getWindow().getDecorView();
view.post( new Runnable() {
    @Override
    public void run() {
         width  = view.getMeasuredWidth();
         height = view.getMeasuredHeight();
         bitmap = Bitmap.createBitmap(height, width, Bitmap.Config.ARGB_8888 );
         canvas = new Canvas(bitmap); 
    }
});