2011-10-12 2 views
0

Мне нужно отобразить небольшие миниатюры для моего списка ListView, с полным изображением на подробном экране.Как отображать масштабированные изображения, не теряя ясности?

Я использую то же изображение для двух макетов. Вот мой список элементов <ImageView>:

<ImageView android:layout_height="50dip"        
    android:layout_width="50dip" 
    android:id="@+id/item_view_img" 
    android:scaleType="fitXY"> 
</ImageView> 

Вот мой взгляд деталь-х <ImageView>:

<ImageView android:id="@+id/update_details_img" 
    android:layout_width="289dip" android:layout_height="206dip" 
    android:src="@drawable/q_silhouette" android:paddingTop="10dp" 
    android:scaleType="fitXY" android:gravity="center">          
</ImageView> 

Оригинальный размер изображения составляет около 300x360. Ни один из моих изображений не выглядит хорошо. Как я могу показать эти изображения, не теряя ясности?

ответ

2

Этот вопрос не такой как Android-вопрос, как вопрос 2D-графики. В настоящее время существует много графических гуру, которые пытаются решить конкретную проблему, с которой вы сталкиваетесь.

Невозможно изменить размеры изображения, не теряя верности от оригинала. Проблема в том, действительно ли эта потеря в верности приводит к потере ясности. Чаще всего ответ заключается в том, что верность снижается, так же как и ясность. Однако есть много способов смягчить это.

Как правило, вы можете уменьшить изображение до примерно 1/2 первоначального размера без артефактов. После этого вы можете часто уменьшать размер еще раз в зависимости от сложности изображения (количество цветов).

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

Все ставки отключены, если вы измените соотношение сторон. Это связано с тем, что оно искажает изображение другими способами. В Android вы можете избежать изменения соотношения сторон в XML, установив для атрибута scaleType значение centerInside. Это значительно поможет и сохранит изображение в пределах. Особенно вы должны сделать это для своего миниатюры ImageView, если вы не собираетесь устанавливать его с тем же соотношением сторон, что и подробный ImageView.

+0

Привет @Fuzzical Logic, я добавил 'centerInside' в свой' '. но изображение не отображается в указанной ширине (289dip), высоте (206dip) .. оно отображается очень маленьким ... ' \t \t \t \t \t \t \t \t \t \t ' –

+0

Тем не менее, theoriginal составляет 300 х 360? Каков фактический размер, который появляется? Вы можете это получить? –

+0

на этот раз мое изображение фактический размер 800x600 .. все еще он отображается небольшим размером .. даже с помощью 'android: layout_width =" 800dip "android: layout_height =" 600dip "' в моем макете .. размер поля увеличивается, но изображение по-прежнему отображается очень мало. Кажется, что это 50x50. –

1

Поскольку вы меняете отношения с этими различными ImageViews, вы можете масштабировать с помощью centerInside или centerCrop.