Android“压扁”游戏图形进入大屏幕的左上角

时间:2010-11-09 00:39:35

标签: android

我正在做以下事情:

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上那样调整大小,我做错了什么?

1 个答案:

答案 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);