Cómo cambiar la imagen en el widget de la aplicación mediante programación en android

Diseñar un widget de la aplicación de Android en el que dos ImageView quiero cambiar la imagen tanto de la ImageView cuando haga clic en la imagen, así como llamar a un método. Ahora uso RemoteView como este

 RemoteViews views1 = new RemoteViews(context.getPackageName(), R.layout.activity_main); views1.setOnClickPendingIntent(R.id.smsImageView, pendIntent1); appWidgetManager.updateAppWidget(appWidgetIds, views1); 

Pero no tengo idea de cómo cambiar la imagen en imageView Gracias.

Widget_Layout:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="horizontal" > <ImageView android:id="@+id/imageview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/imageview1_image1"/> <ImageView android:id="@+id/imageview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:src="@drawable/imageview2_image1" /> </LinearLayout> 

En su AppWidgetProvider:

 public class SwitchWidget extends AppWidgetProvider { public static String SWITCH_WIDGET_UPDATE = "MainActivity.Switch"; public static String IMAGEVIEW1 = "imageview1"; public static String IMAGEVIEW2 = "imageview2"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub super.onUpdate(context, appWidgetManager, appWidgetIds); updateSwitch1(context, appWidgetManager, appWidgetIds[0]); } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub super.onReceive(context, intent); Log.d("SWitch Widget", "On Receive"); RemoteViews remoteViews; AppWidgetManager appWidgetManager = AppWidgetManager .getInstance(context); if (SWITCH_WIDGET_UPDATE.equals(intent.getAction())) { Log.d("SWitch Widget", "Widget Choose"); ComponentName thisAppWidget = new ComponentName( context.getPackageName(), getClass().getName()); int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget); for (int appWidgetID : ids) { updateSwitch1(context, appWidgetManager, appWidgetID); } } } if (intent.getAction().equals(IMAGEVIEW1)) { remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget1); if(flag){ flag = flase remoteViews.setImageViewResource(R.id.imageview1, R.drawable.imageview1_image2); startService(new Intent(this, YOUR_SERVICE_CLASS_NAME.class)); } else { flag = true; remoteViews.setImageViewResource(R.id.imageview1, R.drawable.imageview1_image1); startService(new Intent(this, YOUR_SERVICE_CLASS_NAME.class)); } appWidgetManager.updateAppWidget(new ComponentName(context, SwitchWidget.class), remoteViews); } else if (intent.getAction().equals(IMAGEVIEW2)) { remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget1); if(flag){ flag = flase remoteViews.setImageViewResource(R.id.imageview2, R.drawable.imageview2_image2); } else { flag = true; remoteViews.setImageViewResource(R.id.imageview2, R.drawable.imageview2_image1); } appWidgetManager.updateAppWidget(new ComponentName(context, SwitchWidget.class), remoteViews); } private void updateSwitch1(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { // TODO Auto-generated method stub Log.d("SWitch Widget", "Switch1"); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget1); Intent imageview1Intent= new Intent(context, SwitchWidget.class); wifiIntent.putExtra("ID", appWidgetId); wifiIntent.setAction(IMAGEVIEW1); PendingIntent imageview1PendingIntent = PendingIntent.getBroadcast(context, 0, imageview1Intent,0); remoteViews.setOnClickPendingIntent(R.id.imageview1, imageview1PendingIntent); Intent imageview2Intent= new Intent(context, SwitchWidget.class); wifiIntent.putExtra("ID", appWidgetId); wifiIntent.setAction(IMAGEVIEW2); PendingIntent imageview2PendingIntent = PendingIntent.getBroadcast(context, 0, imageview2Intent,0); remoteViews.setOnClickPendingIntent(R.id.imageview2, imageview2PendingIntent); appWidgetManager.updateAppWidget(appWidgetId, remoteViews); } } 

Y también en tu receptor de widgets agrega estas dos acciones:

  <action android:name="imageview1" /> <action android:name="imageview2" /> 

Sólo tiene que llamar a la función para establecer recursos de imágenes para ello.

 view1.setImageViewResources(R.id.img, IMGS[1]) 

Entonces lo tienes

  • RemoteViewsFactory llamado getViewAt cuando el dataset vacío
  • AppCompat 23.2 utiliza VectorDrawableCompat con RemoteViews (AppWidget) en la API <21
  • ¿Cómo utilizar Glide en remoteViews?
  • ¿Es seguro confiar en la llamada a onDataSetChanged () después de onCreated () en RemoteViewsFactory de un AppWidget
  • Manera fiable de recuperar los detalles de StatusbarNotification (título, texto de notificación)
  • Cómo hacer referencia a una vista en una notificación personalizada
  • Cómo crear ListView con la ayuda de remoteview?
  • Notificación para el reproductor de música android
  • Android ¿Cómo setWeight de una RemoteView?
  • Obtener el ancho del panel de notificaciones de Android
  • No se pudo expandir RemoteViews - Notificación incorrecta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.