Canvas 클래스의 drawBitmap() 메서드가 왜 이미지를 왜곡합니까? ImageView의 setImageBitmap() 함수를 사용하여 ImageView의 하위 클래스에 비트 맵을 설정하면 이미지가 완벽하게 렌더링됩니다.Canvas 클래스의 drawBitmap 메서드가 왜 이미지를 왜곡합니까
이제 Android 4.x에 버그가 있으며이 setImageBitmap이 추가 메뉴 항목에 문제를 발생시킵니다. 추가 메뉴 항목 (일반적으로 기타 ...를 사용하여 표시되는 6 개 메뉴 항목 초과)은 터치 리스너를 느슨하게합니다.
두 가지 다른 방법을 사용하여 이미지를 렌더링하는 방법을 보여주는 다음 코드가 있습니다.
/**
* 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);
}
}