Android应用程序崩溃与简单绘制到画布,disp位图


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

有没有人知道为什么上面Android Studio的代码片段会导致应用程序不断崩溃?我是Android Studio的新手,我想先习惯于构建矩形和形状,但似乎我甚至很难做到这一点。

显示使用不> 0 的值绘制位图的错误,但问题是在 onClick 中使用打印函数后,从窗口或图像视图中抓取高度或宽度,我返回的值> 0,所以我不明白。

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

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

最新更新