从RemoteViews调用setImageDrawable方法

4

我在一个Activity中完成了这个操作,它完美地运行了。

ImageView myImage = (ImageView) findViewById(R.id.myImageView);

ShapeDrawable mDrawable;

mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xff74AC23);
mDrawable.setBounds(x, y, x + width, y + height);
mDrawable.setIntrinsicWidth(width);
mDrawable.setIntrinsicHeight(height);

myImage.setImageDrawable(mDrawable);

现在我想在一个小部件(位于onUpdate内部)中完成相同的事情,并且我必须使用RemoteViews来访问图像。
我该如何从RemoteViews调用ImageViewsetImageDrawable?所有的远程视图方法似乎都需要一个Bitmap

我卡在同一个问题上了。你能指导一下我如何设置形状的颜色吗?我甚至找不到 setXYZ()。最终我不得不发一个全新的问题:https://dev59.com/ymjWa4cB1Zd3GeqProtA。请看看你是否可以帮忙。 - harshit
3个回答

16

您可以通过以下方式在"RemoteViews"中更改ImageView图像的颜色:

remoteviews.setInt(viewid, "setColorFilter", color);

这是正确的答案,我已经在我的视图上设置了带有圆角和不透明度的可绘制图形,在使用这种方法时,我能够改变颜色,同时保留具有圆角的形状。 - Gordon Freeman
完美运行!浪费了这么多时间,只是为了找到这个惊人而简单的解决方案(Y)。 - Anmol

3
after modify drawable :



 Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
 remoteViews.setImageViewBitmap(viewId, bitmap) .

8
ShapeDrawable 无法转换为 BitmapDrawable。 - Ranhiru Jude Cooray

3

RemoteViews 是由 XML 资源描述符构建的。您不能使用代码来构建它们。

您需要像这样执行:

创建一个布局:

<ImageView android:src="@drawable/myshapedrawable">
</ImageView>

然后定义一个新的形状可绘制对象,命名为myshapedrawable.xml(位于res/drawables文件夹中):shape drawable。请注意保留HTML标记。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="oval">
    <size android:width="200" android:height="100"/>
    <solid android:color="0xff74AC23"/>
</shape>

这能让我在运行时改变形状颜色吗?我希望用户可以从小部件配置活动中定义颜色。 - Ranhiru Jude Cooray
1
是的,可以通过 remoteViews.setXYZ(viewId, "setColor", value) 来实现。你需要在 XML 中设置视图的 ID 才能访问它。 - Peter Knego
它几乎完美地运行,只有一个问题。我将“src”属性设置为“myshapedrawable”,它完美地工作。所以我想改变它的颜色,但我只能为“ImageView”设置一个ID,它没有“setColor”方法。我如何调用“src”的“setColor”方法? - Ranhiru Jude Cooray
你的意思是给drawables中的形状添加一个id吗?不幸的是似乎行不通。 - Ranhiru Jude Cooray
尝试编辑帖子,颜色不正确。应该是 #ff74AC23 - Luke Cauthen
谢谢,这个可行!带有圆角和涟漪效果。我正在使用一个带有TextView的ImageButton。views.setInt(R.id.image_button, "setColorFilter", Color.parseColor("#ff5252")); 确保使用<solid android:color="@color/white"/>作为背景。 - einUsername

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接