这是我想要做的:我有一个小部件,我想根据用户选择的颜色设置其背景。它必须是一个渐变。背景是通过设置linearLayout的背景来设置的。为了测试,我做了一个虚拟背景:
remoteViews.setInt(R.id.layout, "setBackgroundResource", R.drawable.widget_background);
Run Code Online (Sandbox Code Playgroud)
我见过这个问题:从 RemoteViews 调用 setImageDrawable但我无法理解如何实现。我什至找不到setXYZ()那里提到的。这是我迄今为止尝试过的:
尝试将 ImageView 作为背景(在 LinearLayout 之前)。它没有为小部件提供适当的边距。由于小部件文本是动态的,有时它会从 imageView 中消失,这不是我想要的
制作一个 bg.xml,其中我有:
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners
android:bottomLeftRadius="7dp"
android:bottomRightRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)现在我完全困惑和卡住了。有人可以尽快帮助(可能更多的代码和更少的链接)吗?另外,请不要像已经问过的那样关闭这个问题。
尝试将 ImageView 作为背景(在 LinearLayout 之前)。它没有为小部件提供适当的边距。由于小部件文本是动态的,有时它会从 imageView 中消失,这不是我想要的
我不完全确定你的意思,但如果你使用 FrameLayout / RelativeLayout 作为你的根布局,然后将 ImageView 放入填充父级,你的图像应该正好是你的小部件的大小。
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="6dp" >
<ImageView
android:id="@+id/widgetBg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY" />
// Other views
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
此外,这就是我正在做的动态更改圆角渐变背景的颜色和 alpha 的工作。然后使用 setImageViewBitmap( ) 应用到图像视图。可能有更好的方法。
public static Bitmap getBackground(int bgColor, int width, int height, Context context) {
try {
// convert to HSV to lighten and darken
int alpha = Color.alpha(bgColor);
float[] hsv = new float[3];
Color.colorToHSV(bgColor, hsv);
hsv[2] -= .1;
int darker = Color.HSVToColor(alpha, hsv);
hsv[2] += .3;
int lighter = Color.HSVToColor(alpha, hsv);
// create gradient useng lighter and darker colors
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.LEFT_RIGHT,new int[] { darker, lighter});
gd.setGradientType(GradientDrawable.RECTANGLE);
// set corner size
gd.setCornerRadii(new float[] {4,4,4,4,4,4,4,4});
// get density to scale bitmap for device
float dp = context.getResources().getDisplayMetrics().density;
// create bitmap based on width and height of widget
Bitmap bitmap = Bitmap.createBitmap(Math.round(width * dp), Math.round(height * dp),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
gd.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
gd.draw(canvas);
return bitmap;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |