我正在尝试在Canvas
上显示图片,但是当我调用drawBitmap
方法时,我只获得了非常左上角,图像没有缩放到屏幕高度和宽度。这是我的代码,涉及自定义视图:
private class ImageOverlay extends View {
public ImageOverlay(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
Bitmap image = BitmapFactory.decodeFile(getPath(baseImage));
Paint paint = new Paint();
paint.setAlpha(200);
canvas.drawBitmap(image, 0, 0, paint);
Log.v(TAG, "Drew picture");
super.onDraw(canvas);
}
private String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if(cursor!=null)
{
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
else return null;
}
baseImage
是一个传递给我的活动的Uri
对象,它是 NOT null!这是实际图像:
以下是Canvas
图片:
答案 0 :(得分:2)
但是当我调用drawBitmap方法时,我只得到了左上角,图像没有缩放到屏幕的高度和宽度。
你告诉你的程序这样做:canvas.drawBitmap(image, 0, 0, paint);
因为(0,0)是左上角。
如果你需要一个较小的图像,你应该缩小它,有可能
Bitmap small = Bitmap.createScaledBitmap(image, width, height, false);
答案 1 :(得分:1)
使用Canvas.drawBitmap()
版本执行所需的缩放,例如this one。
顺便说一句,你的解压缩的Bitmap显然比你需要的要大得多,而且占用了大量的RAM。我建议使用BitmapFactory.Options.inSampleSize
来减少它。