小部件-将图像从URL加载到远程视图中

not*_*eek 5 android android-widget remoteview android-remoteview android-glide

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

我正在使用滑动图像库,并且尝试在扩展了RemoteViewsService的StackWidgetService类的getViewAt方法上填充ImageView。我正在做这样的事情,但是没有用:

    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);
                }
            }));
Run Code Online (Sandbox Code Playgroud)

从URL加载图像以从Android小部件填充RemoteView的正确和最佳方法是什么?

not*_*eek 8

只需要同步进行即可。这似乎工作正常:

    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();
    }
Run Code Online (Sandbox Code Playgroud)


Ell*_*lar 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)
Run Code Online (Sandbox Code Playgroud)

在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);
Run Code Online (Sandbox Code Playgroud)