2010-11-09 3 views
1

я делаю что-то вроде следующего:Android "хлюпающие" игровой графики в левом верхнем углу большого экрана

Bitmap mBitmap;

mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.myimage); 

В OnDraw я делаю это:

canvas.drawBitmap(mBitmap,0,0,null); 

Мой манифест выглядит примерно так:

<supports-screens android:smallScreens="false" android:normalScreens="true" android:largeScreens="true" android:anyDensity="false" />

На больших экранах мои изображения сокращаются примерно на четверть от размера большого экрана и сидят в верхнем левом углу.

В течение жизни я не могу понять, как заставить мои изображения и координаты экрана автоматически настраиваться на большие экраны.

Дело в том, что приведенный выше код отлично работает на большинстве устройств, таких как Droids и обычные экраны. Это всего лишь таблетки или несколько более крупные экранные устройства, где это происходит.

Что я делаю неправильно, когда изображения и координаты на экране не просто изменяются, как на Droid?

ответ

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); 
+0

Масштабирование растрового изображения не будет действительно решить эту проблему. –

+0

Вы уже масштабируете растровые изображения для mdpi и hdpi, правильно? Вам также нужно будет масштабировать его для планшетов, я подозреваю, пока они не добавят что-то в API Android. –

+0

Нет, я в основном помещаю изображение 320x480 в выпадающую папку. Затем на большинстве экранов WVGA размером 800x480, таких как Droid, растровые изображения автоматически масштабируются из-за того, как я указываю anyDensity = false. Но по какой-то причине вместо масштабирования на планшетах изображения сжимаются в верхнем левом углу экрана. –

Смежные вопросы