在我的自定义视图OnDraw
方法中,我使用
Bitmap
绘制到Canvas
的中心
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Rect r = canvas.getClipBounds();
displayWidth = r.right;
displayHeight = r.bottom;
camera.applyToCanvas(canvas);
float zW = (float)bitmapWidth / (float)displayWidth;
float zH = (float)bitmapHeight / (float)displayHeight;
float z = 0.0f;
if (zW>1 || zH>1) {
z = Math.max(zW, zH);
}
canvas.drawColor(Color.DKGRAY);
canvas.drawBitmap(bitmap, (displayWidth/2.0f - (bitmapWidth)/2.0f), (displayHeight/2.0f - bitmapHeight/2.0f), paint);
if (z>0) {
camera.translate(z, -z, z);
}
}
如果Bitmap
的高度或宽度大于Canvas
大小(displayWidth, displayHeight
),我如何使用Camera
类自动缩放以适应{ {1}}并将其居中于Bitmap
。有什么想法吗?
答案 0 :(得分:0)
尝试创建Matrix实例并使用
对其进行初始化 public boolean setRectToRect (RectF src, RectF dst, Matrix.ScaleToFit stf)
您只需要执行一次此操作并将矩阵保留在内存中。请注意Matrix.ScaleToFit
定义CENTER
值。
稍后绘制位图时,请使用此版本的drawBitmap:
public void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)