代码之家  ›  专栏  ›  技术社区  ›  notGeek

将ImageView从URL加载到主屏幕小部件的RemoteView中

  •  10
  • notGeek  · 技术社区  · 6 年前

    我正在开发一个基于Google的Android应用程序的简单小部件 StackWidget 示例: https://android.googlesource.com/platform/development/+/master/samples/StackWidget/src/com/example/android/stackwidget/StackWidgetService.java

    我正在使用Glide图像库并尝试填充 ImageView 在…上 getViewAt 方法 StackWidgetService 扩展的类 RemoteViewsService . 我的代码类似于:

    Handler uiHandler = new Handler(Looper.getMainLooper());
    uiHandler.post(() ->
        Glide.with(context)
            .asBitmap()
            .load(widgetItems.get(position).image_url)
            .into(new SimpleTarget<Bitmap>(512, 512) {
                @Override
                public void onResourceReady(Bitmap bitmap, Transition transition) {
                    rv.setImageViewBitmap(R.id.widget_item_image, bitmap);
                }
            })
    );
    

    从URL加载图像以填充 RemoteView 来自Android Widget ?

    3 回复  |  直到 4 年前
        1
  •  12
  •   notGeek    6 年前

    只是需要同步进行。这似乎很好:

        try {
            Bitmap bitmap = Glide.with(context)
                    .asBitmap()
                    .load(widgetItems.get(position).image_url)
                    .submit(512, 512)
                    .get();
    
            rv.setImageViewBitmap(R.id.widget_item_image, bitmap);
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        2
  •  10
  •   Elletlar FireTr3e    5 年前

    Glide有一个用于执行此操作的构造,称为:AppWidgetTarget:

    在科特林:

        val awt: AppWidgetTarget = object : AppWidgetTarget(context.applicationContext, R.id.img, remoteViews, *appWidgetIds) {
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                super.onResourceReady(resource, transition)
            }
        }
    
        var options = RequestOptions().
                override(300, 300).placeholder(R.drawable.placeholder_img).error(R.drawable.error_img)
    
        Glide.with(context.applicationContext).asBitmap().load(imageUrl).apply(options).into(awt)
    

    在Java中:

       AppWidgetTarget awt = new AppWidgetTarget(context, R.id.img_dog, remoteViews, appWidgetIds) {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
                super.onResourceReady(resource, transition);
            }
        };
    
        RequestOptions options = new RequestOptions().
                override(300, 300).placeholder(R.drawable.placeholder_img).error(R.drawable.error_img)
    
    
        Glide.with(context.getApplicationContext())
                .asBitmap()
                .load(imageUrl)
                .apply(options)
                .into(awt);
    
        3
  •  0
  •   Bukunmi    5 年前

    java中的另一个示例。

      static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                int appWidgetId) {
        String url = "https://firebasestorage.googleapis.com/v0/b/telling-299f3.appspot.com/o/POSTS%2Fcropped1099087212.jpg?alt=media&token=6a3bca19-6483-484d-a7e3-64c25a8a77a8";
    
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.app_widget);
    
        Intent intent = new Intent(context, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    
        AppWidgetTarget awt = new AppWidgetTarget(context, R.id.widget_post_image, views, appWidgetId) {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
                super.onResourceReady(resource, transition);
            }
        };
    
        RequestOptions options = new RequestOptions().
                override(300, 300).placeholder(R.drawable.post_placeholder).error(R.drawable.post_placeholder);
    
    
        Glide.with(context.getApplicationContext())
                .asBitmap()
                .load(url)
                .apply(options)
                .into(awt);
        //views.setImageViewBitmap(R.id.widget_post_image, bitmap);
    
        views.setOnClickPendingIntent(R.id.widget_post_image, pendingIntent);
    
        // Instruct the widget manager to update the widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
    

    我的app\u小部件。xml文件包含

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#09C"
    android:padding="@dimen/widget_margin">
    
    <ImageView
        android:id="@+id/widget_post_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/placeholder_image_one" />
    </LinearLayout>