gpt4 book ai didi

java - RemoteView 中的动态 GradientDrawable

转载 作者:太空狗 更新时间:2023-10-29 12:44:04 33 4
gpt4 key购买 nike

我在为我的小部件设置动态背景时遇到问题:

我的首选项返回用户选择的颜色,我想将它应用到小部件但具有渐变效果。所以这就是我现在的位置:

我的 widget.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/style_widget"
> ...

我的服务.java:

public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);

remoteViews = new RemoteViews(this.getPackageName(), R.layout.widget);
this.prefs = PreferenceManager.getDefaultSharedPreferences(this);

//this is where I get the color preference value, and create another with some transparency

int color1 = prefs.getInt("background_color", 00000000);
int color2 = Color.argb(22, Color.red(color1), Color.green(color1), Color.blue(color1));

int colors[] = { color1, color2 };

//Create the GradientDrawable:
GradientDrawable gradientDrawable = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, colors);

如果我这样做:

remoteViews.setInt(R.id.widget_layout, "setBackgroundColor", color1);

我改变了背景颜色,但由于 gradientDrawable 不是 int,我如何通过 remoteViews 将它应用到我的背景?

最佳答案

好吧,我在这里找到了答案:

Setting GradientDrawable through RemoteView

我创建了一个填充整个小部件的 Imageview,然后使用我的 gradientDrawable 创建了一个位图,然后将位图设置为 ImageView :

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/style_widget"
android:padding="0dip" >

<ImageView
android:id="@+id/bck_image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
/>

然后在我的服务中:

GradientDrawable gradientDrawable = new GradientDrawable(
GradientDrawable.Orientation.LEFT_RIGHT, colors);

float dpi = getBaseContext().getResources().getDisplayMetrics().xdpi;
float dp = getBaseContext().getResources().getDisplayMetrics().density;

Bitmap bitmap = Bitmap.createBitmap(Math.round(288 * dp), Math.round(72 * dp), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
gradientDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
gradientDrawable.setCornerRadius(5 * (dpi/160));
gradientDrawable.draw(canvas);
remoteViews.setImageViewBitmap(R.id.bck_image, bitmap);

(我是 Android 的新手,所以我不知道代码的格式是否正确,但对我来说它可以工作,以防它可以帮助任何人。)

关于java - RemoteView 中的动态 GradientDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21095025/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com