为什么 Canvas 类中的 drawBitmap() 方法会扭曲图像?当我使用 ImageView 的 setImageBitmap() 函数在 ImageView 的子类上设置位图时,图像被完美渲染。
现在在 Android 4.x 中有一个错误,这个 setImageBitmap 会导致额外的菜单项出现问题。额外的菜单项(通常超过使用更多...显示的六个菜单项)失去了触摸侦听器。
我有以下代码显示如何使用两种不同的方法渲染图像。
/**
* draws bitmap icons
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(bitmap == null){
bitmap = AppMain.getItemIcon(thisItem);
}
//drawBitmap(canvas, bitmap); //distorts image
drawBitmap(bitmap); //works perfect
}
//draw using setImageBitmap
private void drawBitmap(Bitmap bitmap){
if(bitmap != null){
this.setImageBitmap(bitmap);
Matrix m = this.getImageMatrix();
m.setRectToRect(new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight()),
new RectF(0, 0, this.getWidth(), this.getHeight()),
Matrix.ScaleToFit.CENTER);
this.setImageMatrix(m);
}
}
//draw using canvas.drawBitmap()
private void drawBitmap(Canvas canvas, Bitmap bitmap){
if(bitmap != null){
Matrix m = new Matrix();
m.setRectToRect(new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight()),
new RectF(0, 0, this.getWidth(), this.getHeight()),
Matrix.ScaleToFit.CENTER);
canvas.drawBitmap(bitmap, m, null);
}
}