1

我尝试在我的小部件中将图像设置为 ImageView,但我得到的是一个空屏幕而不是图片

这是布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
<ImageView 
    android:id="@+id/stage"
  android:layout_width="match_parent"
 android:layout_height="match_parent"

    />
</RelativeLayout>

这是代码:

public class MyWidget extends AppWidgetProvider {

      Bitmap bitmap;
      Bitmap bckgrnd;
      Bitmap over;

      @Override
      public void onEnabled(Context context) {
        super.onEnabled(context);

 RemoteViews widgetView = new RemoteViews(context.getPackageName(),
                R.layout.widget);
        bckgrnd=BitmapFactory.decodeResource(context.getResources(), R.drawable.backgrnd);
        over=BitmapFactory.decodeResource(context.getResources(), R.drawable.human);

        bitmap=bckgrnd.copy(Bitmap.Config.ARGB_8888, true);;
        Canvas c=new Canvas(bitmap);
        c.drawBitmap(over, 50, 50, new Paint());
        widgetView.setImageViewBitmap(R.id.stage, bitmap);



        Log.d("MyLog", "onEnabled");
      }

    ......
    }

所以,我的 LogCat 中有一个“OnEnabled”日志,这意味着这段代码执行得很好,但 ImageView 仍然是空的。如果我在布局 xml 中设置任何图像 - 它会显示该图像,这意味着 xml 设置正确,但代码不会在 ImageView 中更改此图像。

我尝试在 onUpdate() 中执行此操作,但它也不起作用。我该怎么做才能在 ImageView 中更改此图像?

4

2 回答 2

1

我遇到了和你类似的问题,除了我在后续的 onUpdate 调用中调用了 rv.setImageViewResource。

我的解决方案是你必须在 xml 文件中为 ImageView 设置初始图像,然后你可以在运行时更改 ImageView 的图片;如果您没有在 xml 中指定初始图片,则 setImageViewResource 不起作用,ImageView 什么也不显示。

更新:

现在 setImageViewResource 无论 ImageView 在 xml 中是否有初始 src 都可以正常工作,但它是有线的。

于 2015-10-26T09:29:58.967 回答
1

我认为现在为时已晚..但只是为了帮助任何仍在寻找的人。

对我来说,这有效..

// Change widget image, and update current app widget.
widgetView.setImageViewBitmap(R.id.stage, bitmap);
AppWidgetManager.getInstance(context).updateAppWidget(COMPONENT_NAME, widgetView);

而且,COMPONENT_NAME

COMPONENT_NAME = new ComponentName(context, MyWidget.class);

这将更新您的应用程序的每个小部件。如果您只想更新单击的小部件,则将其传递给widgetIdin COMPONENT_NAMEupdateAppWidget()

于 2015-08-17T10:15:34.903 回答