0

У меня есть простой виджет, содержащий ImageView. Я хотел бы получить изображение из Интернета и отобразить его в ImageView, сохраняя соотношение сторон.Как я могу заполнить ImageView в Appwidget, сохраняя соотношение сторон?

Вот определение компоновки для виджета:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/widget_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ImageView 
     android:id="@+id/quality_image" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/widget_icon" 
     android:layout_marginBottom="@dimen/widget_spacing" 
     android:scaleType="fitXY" /> 

</LinearLayout> 

..и это изображение в вопрос:

enter image description here

Я хотел бы изображение, чтобы всегда соответствовать высоте ImageView. Этот бит был прост. Если ширина ImageView меньше, чем ширина изображения, я не против, если изображение обрезается горизонтально, пока поддерживается соотношение сторон. Я установил максимальный размер виджета, чтобы он не превышал размер изображения, поэтому нам не нужно беспокоиться о случаях, когда высота ImageView больше, чем изображение.

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

ответ

1

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

Лучший способ найти пропорции на AppWidget на максимальной высоте - создать XML-Drawable с фиксированным соотношением сторон, масштабировать его до максимальной высоты виджета и затем привязать стороны ImageView, используя RelativeLayout. Пример:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/widget_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" > 

    <ImageView 
     android:id="@+id/aspectratio" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:adjustViewBounds="true" 
     android:src="@drawable/frame_aspect" 
     android:scaleType="fitCenter" > 
    </ImageView> 

    <ImageView 
     android:id="@+id/quality_image" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_alignLeft=”@id/aspectratio” 
     android:layout_alignRight=”@id/aspectratio” 
     android:layout_alignTop=”@id/aspectratio” 
     android:layout_alignBottom=”@id/aspectratio” 
     android:scaleType="fitCenter" > 
</RelativeLayout> 

Вот макет для drawable (frame_aspect.xml), который определяет соотношение сторон. Примечание. Важно, чтобы эта форма была больше, чем ваш виджет. Встроенные scaleType делают хорошую работу, уменьшая масштаб, но не настолько хороши в масштабировании.

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape = "rectangle"> 

    <size 
     android:width="1000px" 
     android:height="500px"/> 
</shape> 

Теперь, когда у вас есть виджет с quality_image масштабируется на максимальную высоту для заданного соотношения сторон, вы можете играть с scaleType на ImageView, чтобы определить, что если обрезку лучше.

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