通过RemoteView设置GradientDrawable

2023-12-10

这就是我想要做的:我有一个小部件,我想根据用户选择的颜色设置其背景。它必须是一个渐变。背景是通过设置 LinearLayout 的背景来设置的。为了进行测试,我对虚拟背景进行了如下操作:

remoteViews.setInt(R.id.layout, "setBackgroundResource", R.drawable.widget_background);

我见过这个问题:从 RemoteViews 调用 setImageDrawable但我无法理解如何实施。我什至找不到setXYZ()正如那里提到的。这是我到目前为止所尝试过的:

  1. 使渐变可动态绘制。在这种方法中,我无法设置背景,因为据我所知,所有方法都采用可绘制对象的 id,并且我有一个可绘制对象。
  2. 尝试使用 ImageView 作为背景(在 LinearLayout 之前)。它没有为小部件提供适当的边距。由于小部件文本是动态的,有时它会超出 imageView,这不是我想要的

  3. 制作一个 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>
    

现在我完全困惑和卡住了。有人可以帮忙吗(可能更多的代码和更少的链接) 尽快?另外,请不要像已经问过的那样关闭这个问题.


尝试使用 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>

另外,这就是我正在做的动态更改圆角渐变背景的颜色和 alpha 的操作。然后使用setImageViewBitmap()应用到imageview。也许有更好的方法。

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;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过RemoteView设置GradientDrawable 的相关文章

随机推荐

  • 标签为类别页面 Blogger 中的标题

    我有一个网站 可以在其中显示具有所有相同标签的帖子 有没有办法在显示具有相同标签的所有帖子时将标签作为标题 例如 关于https newsotuniverse blogspot ca search label astrophysicals有
  • Swift 中每次动画迭代后的延迟

    我有一个核心动画 repeatCount被设定为Float infinity 在动画的每次迭代之后 即 每次重复之后 我想要延迟 3 秒 我怎样才能实现这个目标 谢谢 您可以使用function像下面这样做你需要做的事情 func anim
  • 从 Delphi 访问 Android 的 SharedPreferences 类

    我刚刚开始使用 Delphi XE5 进行 Android 开发 并尝试构建一个简单的应用程序 该应用程序需要能够保留一些输入的信息 配置 我已经弄清楚了 Android 类共享首选项可能是最简单的方法 但我不知道如何从 Delphi XE
  • 协程演示源码

    这是一个程序示例 其中协程确实有助于简化 该算法 恕我直言 否则很难实现 我还尝试为演示选择一个有用的任务 该实用程序将 一个二进制文件到一系列 A Z 符号 以及后面 没有任何显着的 冗余 并且它能够处理任何指定的字母表 参见 M Ini
  • 新的 Firebase 数据导致 TableView 单元格闪烁 (Firebase/iOS/Swift)

    我的主要问题是如何消除闪烁 但我也只是想知道我是否正确且最有效地处理非规范化 Firebase 数据 我的方法接近正确吗 因此 我正在努力尝试使用已非规范化的数据正确显示 firebase 数据库中的数据 我有帖子 然后是与每个帖子相关的评
  • 从 2010 Data Macro 中运行 vba 代码

    我有一个创建文本文件的函数 需要从数据宏运行它 这样晚上的人就可以在桌子上使用它了 我该怎么做呢 根据我们的聊天 你不知道 数据宏甚至可以在 MS Access 之外运行 如果它们使用 MS Access 内的代码 则不会发生这种情况 它们
  • dyld:惰性符号绑定失败:找不到符号:____chkstk_darwin macOS High Sierra 10.13.6

    命令 Brew 安装节点 安装后 命令 哪个节点 gt 输出 usr local bin node 命令 node v gt 输出 dyld lazy symbol binding failed Symbol not found chkst
  • 在 codeigniter 中处理 $_POST

    我如何在 codeigniter 中执行此操作 cuisineArr isset POST cuisine POST cuisine array 我在某处读到直接使用 Post 不是正确的方法 应该使用 post 反而 但是我该如何在 co
  • 我需要做什么才能让 Core Data 自动迁移模型?

    我已阅读有关核心数据模型自动 轻量级迁移的文档 但我在实现它时遇到问题 据我了解 应用程序应该注意到它拥有的模型和设备上已经存在的模型不相同 如果您仅添加了属性或关系以及类似的简单更改 那么模型应该会自动升级 有什么指示吗 我需要在 Xco
  • 反应式和非阻塞方法 Micronaut 与 apache kafka

    我试图从 Micronaut kafka 实现中获取非阻塞响应 但是返回值不起作用 public class ProductManager implements IProductManager private final Applicati
  • 为什么 typeof NaN 返回“数字”?

    只是出于好奇 这似乎不太符合逻辑typeof NaN是数字 就像NaN NaN or NaN NaN顺便说一句 返回 false 这是 JavaScript 的特性之一吗 或者有什么原因吗 编辑 感谢您的回答 然而 要让人们头脑清醒并不是一
  • 将 mvc 4 降级/转换为 mvc 3

    我知道这是一个相当奇怪的问题 请不要攻击我 我具体需要将当前的 Asp Net Mvc 4 net Framework 4 5 应用程序 降级 到 Asp Net Mvc 3 net Framework 4 0 因为我们的共享托管提供商不支
  • 将通过URL获取的数据转换为post变量

    我需要读取使用 POST 操作类型提交的表单的结果 那么 我是否可以将通过 GET 变量获得的变量转换为 POST 然后我可以使用 file get contents 简单地读取内容 请帮助我使用此方法或通过某种替代方法 如果可能 获取数据
  • 我应该为 jar commons-lang.jar 使用哪个 pom 依赖项

    如果 jar 名称中没有版本 我如何知道应该使用哪个版本的 pom 依赖项 例如 jar commons lang jar 我应该使用什么版本的 pom 依赖项 以下是其在 Maven 中央存储库上的搜索结果 http search mav
  • 查找字符串中出现频率最高的单词并检查字符串是否仅包含 [a-z][A-Z] 个字符

    我用 Python 创建了一些代码来查找字符串中出现频率最高的单词 我对 Python 还很陌生 请求你的帮助 看看我是否可以更好 更有效地编写这个代码 代码返回字符串中出现频率最高的单词的一个整数 另外我想确保该字符串仅包含 a z A
  • 使用 celery 运行“独特”任务

    我使用 celery 来更新我的新闻聚合网站中的 RSS 提要 我为每个提要使用一个 task 并且一切似乎运行良好 有一个细节我不确定处理得很好 所有提要都使用 periodic task 每分钟更新一次 但是如果在启动新任务时提要仍在从
  • 溢出:隐藏在 div 标签上会影响背景颜色

    的定义overflow hidden指出 the overflowing content is completely hidden not accessible to the user from http quirksmode org cs
  • 使用 import java.* 来使用“java”包下的所有子包怎么样?

    import java 为什么我不能进行此导入 我没有导入 java 包的特定子包中的所有类 而是尝试导入 java 包下的所有子包 如何导入所有内置类 java中没有子包这种东西 java util stream不是 的子包java ut
  • STRCHR 与 STRRCHR 有何区别? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我想知道这两种不同用途之间
  • 通过RemoteView设置GradientDrawable

    这就是我想要做的 我有一个小部件 我想根据用户选择的颜色设置其背景 它必须是一个渐变 背景是通过设置 LinearLayout 的背景来设置的 为了进行测试 我对虚拟背景进行了如下操作 remoteViews setInt R id lay