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