Android устанавливает размер изображения программно

1

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

RemoteViews updateViews = new RemoteViews(EditPreferences.this.getPackageName(), R.layout.widgetmain2);
updateViews.setImageViewBitmap(R.id.ImageView00, ((BitmapDrawable)EditPreferences.this.getResources().getDrawable(R.drawable.normal_black_op100)).getBitmap());
ComponentName thisWidget = new ComponentName(EditPreferences.this, HelloWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(EditPreferences.this);
manager.updateAppWidget(thisWidget, updateViews);

заранее спасибо

Теги:
widget

1 ответ

6

На самом деле это очень широкий вопрос. Для этого есть несколько ответов:

  1. Обычно вы делаете это в layout.xml, устанавливая соответствующие параметры макета (ширина, высота) и scaleType: http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType. Это обрабатывает множество случаев - всякий раз, когда изображение установлено, его масштабирование будет пересчитываться в соответствии с его параметрами.

  2. Но иногда вам нужно делать это программно. Но он более сложный, потому что он должен учитывать плотность экрана и плотность растрового изображения, размер экрана независимо от размера пикселя и так далее. Здесь есть два момента:

    • Получение растрового изображения в нужном размере. Это зависит от того, загружаете ли вы растровое изображение из ресурсов (как вам кажется), или загружаете ли вы его вручную. Если вы хотите полностью контролировать размер растрового изображения, то вам нужно понять, как все это работает - я рекомендую прочитать http://developer.android.com/guide/practices/screens_support.html и особенно раздел "Масштабирование объектов растровых изображений" в Runtime.
    • Настройка размеров растровых изображений на экране. Если вы хотите сделать это во время выполнения, и вы уже рассчитали необходимый размер в физических пикселях. Помните, что есть также независимые пиксели, и вам нужно преобразовать физические пиксели в другой (посмотрите на определение "плотности независимых пикселей" и алгоритмы для расчета в http://developer.android.com/guide/practices/screens_support.html. физические пиксели, вы можете применить LayoutParameters к ImageView. Это будет что-то вроде:

Пример:

LinearLayout.LayoutParams layoutParams  = new    
         LinearLayout.LayoutParams(width_physical_pixels, height_physical_pixels);
imageView.setLayoutParams(layoutParams);

ВАЖНЫЙ! LinearLayout здесь просто пример. Это должен быть класс PARENT ImageView - поэтому параметры макета всегда относятся к типу контейнера объектов, а не к объекту, на котором они установлены.

  • 0
    Я рассмотрю все, что вы написали, но сначала я хотел попробовать это, но в последнем ряду оно закрывается. Ты знаешь почему? RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams (88, 88); View v = EditPreferences.this.findViewById (R.id.ImageView01); v.setLayoutParams (layoutParams);
  • 0
    Что за сообщение об ошибке (подсказка: попробуйте logcat)? Я предполагаю, что ваше представление НЕ в RelativeLayout, а в каком-то другом макете, и оно принудительно закрывается из-за ClassCastException (вы увидите в сообщении, какой класс там ожидается).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню