我正在做以下事情:
Bitmap mBitmap;
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.myimage);
在onDraw中,我这样做:
canvas.drawBitmap(mBitmap,0,0,null);
My Manifest看起来像这样:
<supports-screens android:smallScreens="false" android:normalScreens="true" android:largeScreens="true" android:anyDensity="false" />
在较大的屏幕上,我的图像缩小到大屏幕大小的四分之一,并位于左上角。
对于我的生活,我无法弄清楚如何让我的图像和屏幕坐标自动调整到更大的屏幕。
问题是,上面的代码在大多数设备上运行良好,例如机器人和普通屏幕。这只是平板电脑或稍微大一点的屏幕设备。
如果屏幕上的图像和坐标不像在Droid上那样调整大小,我做错了什么?
答案 0 :(得分:1)
这些大型设备(平板电脑)很可能拥有比典型手机大得多的屏幕(宽度和高度)。
无论如何,我将共享一个我写的函数,它会将位图的大小调整为所需的宽度和高度(这样你就可以根据屏幕大小计算出来,然后重新调整它)。当然,所有这一切都在缩放它,所以请确保你有合适的mdpi,hdpi版本。
public Bitmap getBitmap(Resources resources, String bitmapName, int width, int height)
{
// this is just a Map of String, Bitmaps I use for cacheing
Bitmap _bitmap = GraphicAssets.get(bitmapName);
if(_bitmap != null)
{
return _bitmap; // return cached result
}
else
{
int fieldValue = 0;
try
{
fieldValue = getFieldValue(bitmapName, R.drawable.class);
}
catch (Exception e)
{
Log.e("getBitmap", "Cannot read field value", e);
}
Bitmap _bitmapPreScale = BitmapFactory.decodeResource(resources, fieldValue);
int oldWidth = _bitmapPreScale.getWidth();
int oldHeight = _bitmapPreScale.getHeight();
int newWidth = width;
int newHeight = height;
// calculate the scale
float scaleWidth = ((float) newWidth) / oldWidth;
float scaleHeight = ((float) newHeight) / oldHeight;
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap _bitmapScaled = Bitmap.createBitmap(_bitmapPreScale, 0, 0, oldWidth, oldHeight, matrix, true);
return _bitmapScaled;
}
public int getFieldValue(String name, Class obj) throws
NoSuchFieldException, IllegalArgumentException,
IllegalAccessException
{
Field field = obj.getDeclaredField(name);
int value = field.getInt(obj);
return value;
}
所以叫它:
Bitmap bitmap = getBitmap(GetResources(), "name_of_image_in_res/drawable_folder_without_file_extension", DesiredWidth, DesiredHeight);