2013-11-17 3 views
0

Я тестирую функцию ImageView, когда я сталкиваюсь с вопросами. У меня есть изображение, которое составляет 1000 * 562. Мое устройство для тестирования - это Samsung I9103, размер экрана которого составляет 480 * 800. Мой дизайн проекта довольно прост, всего лишь ImageView.Почему ширина и высота изображения меньше ширины и высоты?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<ImageView 
    android:id="@+id/test1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:src="@drawable/pic_1000_562"/> 
</RelativeLayout> 

Я использую следующий код, чтобы получить вытяжку и ImageView размера

public void onWindowFocusChanged(boolean hasFocus){ 
    ImageView imageView=(ImageView)findViewById(R.id.test1); 
    Log.v("Testresult","width= "+imageView.getWidth()+" height= " 
    +imageView.getHeight()); 
    Log.v("Testresult","drawawidth= "+imageView.getDrawable().getBounds().width()+ 
      " drawableheight= " 
    +imageView.getDrawable().getBounds().height()); 
} 

Но я получаю

11-17 17:48:46.865: V/Testresult(15225): width= 480 height= 690 
11-17 17:48:46.865: V/Testresult(15225): drawawidth= 1000 drawableheight= 562 

Мой вопрос, почему drawabldwidth 1000 не 480, как изображение должен быть масштабирован, чтобы соответствовать экрану?

ответ

2

Это потому, что ваш ImageView занимает весь экран, поэтому он принимает разрешение устройства. Полагаю, эта часть ясна.

Что касается рисунка, независимо от размера ImageView, он будет иметь тот же доступный размер и размер, который у вас есть в ваших ресурсах. Не имеет значения, что размер ImageView меньше, выталкиваемый по-прежнему остается прежним.


Чтобы получить размеры масштабируемого изображения, вы можете получить горизонтальную и вертикальную шкалу:

  • по горизонтали: 480/1000 = 0,48
  • вертикали: 562/800 = 0,7025

Изображение будет масштабироваться по нижнему значению (0,48 в этом случае). Таким образом, масштабированные габариты являются:

  • по горизонтали: 1000 * 0,48 = 480
  • по вертикали: 562 * 0,48 = 269,76
+0

Как можно видеть, что ширина изображения соответствует родителя (480), и высота также масштабируется примерно до (269,76), сохраняя исходное соотношение. Тогда как я могу получить масштабный размер изображения (480 * 269,76)? – juejiang

+0

Я думаю, вы можете проверить, будет ли он масштабироваться горизонтально или вертикально (какой масштаб меньше), а затем получить другой. – Szymon

+0

См. Мое редактирование для подробного объяснения. – Szymon

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