Ответ 1
Вы можете использовать этот сегмент для программного масштабирования вида изображения.
imgview.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
Надеюсь, что это поможет...
Я разрабатываю виджет с изображением на боковой стороне, который может быть выбран пользователем на одном из экранов настроек. Затем изображение можно установить у пользователя с помощью ImageView.setScaleType( "ЦЕНТР" ). Это работает. Затем URL-адрес изображения сохраняется в настройках в виде URL-адреса, а также в кодировке Base64 String из Bitmap (потому что я хочу сжать изображение, и пользователь может повернуть его в настройках)
В виджетах загружается изображение. Это прекрасно работает. С URI и с Bitmap тоже. Также работает ScaleType ImageView и фиксированное значение в макете.
Но как я могу программно определить ScaleType ImageView в виджетах? Причина. Я хочу установить значение ScaleType в значение, которое пользователь выбрал в настройках. С RemoteViews мы не можем получить ImageView...
Я пробовал:
myRemoteViews.setString(R.id.myImage, "setScaleType", "CENTER" );
В файле журнала указано: Функция setScaleType недоступна для ImageView.
Кто-нибудь знает, как сделать это определение внутри AppWidget?
Вы можете использовать этот сегмент для программного масштабирования вида изображения.
imgview.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
Надеюсь, что это поможет...
Если вы посмотрите на исходный код ImageView
, вы можете увидеть, что методу setScaleType
не хватает аннотации @android.view.RemotableViewMethod
, поэтому он не может быть вызван через интерфейс RemoteViews
.
Там есть обходное ограничение для этого ограничения, но это не очень хорошо: определите другой формат XML для каждого ScaleType, который вы хотите, и выберите между ними непосредственно перед созданием RemoteViews
. Если ваш макет сложный или у вас есть несколько видов для применения этого обходного пути, вы можете использовать RemoteViews.addView
, чтобы добавить конкретный ImageView
макет внутри основного макета.
Я использую это обходное решение (с addView
) для appwidgets в своем приложении Showr. Проблема с этим методом заключается в том, что пусковая установка имеет ошибку: если вы измените тип шкалы существующего appwidget, создав новый RemoteViews
и вызывая addView
, чтобы добавить к нему другой макет ImageView
, он не " всегда понимаем, что макет изменился.
Поскольку нет простого способа вызвать setScaleType
в представлении "удалить", работа, с которой я столкнулся, делала три изображения в моем макете, а затем меняла видимость тех, которые не имеют типа шкалы, выбранного пользователь:
// first I declared a map to associate preference values with imageView ids
private static final HashMap<Integer,Integer> widgetImageViewIds;
static {
widgetImageViewIds = new HashMap<Integer, Integer>();
widgetImageViewIds.put(MyAppPreferences.PREF_ALIGN_START, R.id.imageViewStart);
widgetImageViewIds.put(MyAppPreferences.PREF_ALIGN_CENTER, R.id.imageViewCenter);
widgetImageViewIds.put(MyAppPreferences.PREF_ALIGN_END, R.id.imageViewEnd);
}
...
// then when I update my widget show/hide the widgets based on the preference
for (HashMap.Entry<Integer, Integer> entry : widgetImageViewIds.entrySet()) {
Integer imageViewAlignment = entry.getKey();
Integer imageViewId = entry.getValue();
views.setViewVisibility(imageViewId, imageViewAlignment.intValue() != imageAlignmentPreferenceValue ? View.GONE : View.VISIBLE);
}