studio - set image view android
Android RemoteViews, ¿cómo configurar ScaleType de un ImageView dentro de un widget? (3)
Dado que no es una forma sencilla de llamar a setScaleType
en la vista de eliminación, mi trabajo fue crear tres imageViews en mi diseño y luego cambiar la visibilidad de los que no tienen el tipo de escala seleccionado por el usuario:
// 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);
}
Estoy desarrollando un widget con una imagen en el lado derecho, que el usuario puede elegir en una de las pantallas de configuración. La imagen se puede establecer desde el usuario con ImageView.setScaleType ("CENTER"). Eso funciona. La URL de la imagen se almacena en las preferencias como URL y también como cadena codificada en Base64 del mapa de bits (porque quiero reducir la imagen y el usuario puede rotarla en la configuración)
En el widget, cargo la imagen. Eso funciona bien Con el URI y con el mapa de bits también. El ScaleType de ImageView también se establece en un valor fijo en el Diseño, también funciona.
Pero, ¿cómo puedo definir el ScaleType de ImageView en el widget programáticamente? Porque quiero establecer ScaleType en el valor, el usuario ha elegido en la configuración. Con RemoteViews, no podemos obtener el ImageView ...
Lo intenté:
myRemoteViews.setString (R.id.myImage, "setScaleType", "CENTER");
El archivo de registro dice: La función setScaleType no es posible para ImageView.
¿Alguien sabe cómo hacer esta definición dentro de AppWidget?
Puede usar este segmento para establecer el tipo de escala para la Vista de imagen programáticamente.
imgview.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
Espero eso ayude...
Si observa el código fuente de ImageView
, puede ver que el método setScaleType
carece de la anotación @android.view.RemotableViewMethod
, por lo que no se puede RemoteViews
través de la interfaz RemoteViews
.
Existe una solución para esta limitación, pero no es bonita: defina un XML de diseño diferente para cada ScaleType que desee y elija entre ellos justo antes de crear RemoteViews
. Si su diseño es complejo, o si tiene más de una vista para aplicar esta solución alternativa, es posible que desee utilizar RemoteViews.addView
para agregar el diseño particular de ImageView
dentro del diseño principal.
Estoy usando esta solución (con addView
) para aplicaciones en mi aplicación Showr . El problema con este método es que el iniciador de stock tiene un error: si cambia el tipo de escala de un appwidget existente creando un nuevo RemoteViews
y llamando a addView
para agregarle un diseño diferente de ImageView
, no siempre se da cuenta de que el diseño tiene cambiado