2015-04-24 4 views
-2

У меня есть растровое изображение, которое я хочу отобразить на холсте, и я хочу, чтобы его размер (ширина и высота) был относительно размера экрана, поэтому, если у меня есть на большом экране растровое изображение будет большим, и если у меня будет маленький экран, то растровое изображение будет небольшим).Каков наилучший способ поддержки разных размеров экрана в Android

У меня есть два варианта:

  1. Создание нескольких версий растрового изображения, каждый из которых в различных размерах, и поместить их в соответствующем вытяжке каталога.

  2. Используйте только один размер растрового изображения и просто динамически масштабируйте его относительно размера холста и рисуйте его, как я хочу.

Кажется, что Google предпочитает первый способ, но я не знаю почему. Может ли кто-нибудь сказать мне, что является предпочтительным способом?

+0

Хотите ли вы масштабировать изображение, связанное с размером экрана? –

+0

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

ответ

0

Попробуйте это Расшифруйте Bitmap:

Где imagefilepath это имя пути изображения, оно будет в String, тайным, что в файл с помощью

файла фотографии = новый файл (imageFilePath);

Где фотография - это имя файла изображения, теперь вы задаете высоту и ширину в соответствии с вашими требованиями.

Bitmap bitmap = decodeFile(photo); 
      bitmap = Bitmap.createScaledBitmap(bitmap,150, 150, true); 
      imageView.setImageBitmap(bitmap); 

    private Bitmap decodeFile(File f){ 
    try { 
     //decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f),null,o);    
     //Find the correct scale value. It should be the power of 2. 
     final int REQUIRED_SIZE=70; 
     int width_tmp=o.outWidth, height_tmp=o.outHeight; 
     int scale=1; 
     while(true){ 
      if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE) 
       break; 
      width_tmp/=2; 
      height_tmp/=2; 
      scale++; 
     } 

     //decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize=scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } catch (FileNotFoundException e) {} 
    return null; 
} 
+0

Прежде всего, спасибо за ваш ответ. Но мой вопрос больше с точки зрения «лучшей практики», я знаю, как реализовать масштаб. я просто не понимаю, почему кажется, что Google хочет, чтобы я использовал разные фиксированные размеры растровых изображений вместо того, чтобы динамически масштабировать растровое изображение до размера, который я хочу. – kundasaba

+0

полезно использовать одно изображение для нескольких экранов, так как изображения настраиваются в соответствии с вашими экранами разработки. –

0

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