我正在努力让我的小部件看起来漂亮,但小部件反击;(
我将小部件布局背景设置为生成线性渐变时遇到问题。
目前,我已经找到了如何使用该渐变的自定义“weigth”颜色生成线性渐变:
public static PaintDrawable createLinearGradient(final int left, final int top, final int right, final int bottom,
final int[] colors, final float[] positions)
{
ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory()
{
@Override
public Shader resize(int width, int height)
{
LinearGradient lg = new LinearGradient(left, top, right, bottom, colors, positions, Shader.TileMode.REPEAT);
return lg;
}
};
PaintDrawable gradient = new PaintDrawable();
gradient.setShape(new RectShape());
gradient.setShaderFactory(shaderFactory);
return gradient;
}
这是一种将窗口小部件背景设置为可绘制文件夹的方法:
int backgroundId = getDrawableByName(context, "round_transparrent_background");
remoteViews.setInt(R.id.mainLayout, "setBackgroundResource", backgroundId);
我需要一种编写此命令的方法如下:
Drawable background = createLinearGradient(params ... );
remoteViews.setInt(R.id.mainLayout, "setBackgroundResource", background);
答案 0 :(得分:1)
RemoteView本质上仅限于某些功能。如果您认为传递给RemoteViews
的任何信息需要跨进程传输,而不是所有类/数据类型都受支持,那么这是有道理的。
无法将任意Drawable
对象传递给RemoteViews
- 没有一种方法支持它,而Drawable
通常不是一个可以编组数据的类流程。它适用于可绘制资源的原因是资源ID只是一个整数,Android知道如何将它们扩展为Bitmaps(用于png)或它们各自的Drawable
实现(用于声明的任何内容)用XML)。
正如我所看到的,唯一可行的策略是使用Bitmap
API将渐变实际绘制到Canvas
并使用AppWidget中的ImageView
进行操作作为背景。然后,您可以致电remoteViews.setImageViewBitmap()
来设置ImageView
。