为什么 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);
    }
}