Android 中如何在代码中动态设置,桌面小部件【背景颜色、圆角、颜色、透明度】的两种实现方法

目录

shape配合代码实现桌面小部件【背景颜色、颜色、透明度】

纯代码实现桌面小部件【背景颜色、圆角、颜色、透明度】


shape配合代码实现桌面小部件【背景颜色、颜色、透明度】

这种方式是利用shape加代码实现一个背景图,这种方式唯一缺点就是不能动态设置矩形的圆角

1.在drawable目录下创建【widget_background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"><corners android:radius="5dp" /><!-- 特别注意此处,不要设置透明颜色,除非你的背景透明颜色是固定的 --><solid android:color="#000000"/>
</shape>

2.在小部件的布局中添加一个【ImageView】用来作为背景使用

注意 tools:background="@drawable/widget_background" 是在视图编辑界面预览用的,实际运行时不会有该效果

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv_appwidget_bg"android:layout_width="match_parent"android:layout_height="match_parent"android:contentDescription="@null"tools:background="@drawable/widget_background" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="小部件文字内容"android:textSize="25dp"android:textColor="#FFFFFF"/></FrameLayout>

3.最后就是在代码中动态设置小部件的背景透明度、颜色,这种方式不能动态设置圆角

// 设置之前创建的shape资源作为背景
views.setInt(R.id.iv_appwidget_bg, "setImageResource", R.drawable.widget_background);
// 设置颜色用于着色,意思就是将widget_background的颜色着色成你指定的颜色
views.setInt(R.id.iv_appwidget_bg, "setColorFilter", Color.BLUE);
// 设置透明度 0到255
views.setInt(R.id.iv_appwidget_bg, "setAlpha", 85);

纯代码实现桌面小部件【背景颜色、圆角、颜色、透明度】

1.在小部件的布局中添加一个【ImageView】用来作为背景使用,注意这种方式需要设置android:scaleType="fitXY"属性

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv_appwidget_bg"android:layout_width="match_parent"android:layout_height="match_parent"android:contentDescription="@null"android:scaleType="fitXY"tools:background="@drawable/widget_background" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="小部件文字内容"android:textSize="25dp"android:textColor="#FFFFFF"/></FrameLayout>

2.代码中实现不在细说附上背景绘制的工具类

/*** dengmengxin 码字不易搬运注明出处*/
public final class DrawableUtils {public static Drawable tintDrawable(Drawable drawable, ColorStateList colors) {final Drawable wrappedDrawable = DrawableCompat.wrap(drawable);DrawableCompat.setTintList(wrappedDrawable, colors);return wrappedDrawable;}public static Bitmap drawableToBitmap(Drawable drawable) {// 取 drawable 的长宽int w = drawable.getIntrinsicWidth();int h = drawable.getIntrinsicHeight();// 取 drawable 的颜色格式Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565;// 建立对应 bitmapBitmap bitmap = Bitmap.createBitmap(w, h, config);// 建立对应 bitmap 的画布Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, w, h);// 把 drawable 内容画到画布中drawable.draw(canvas);return bitmap;}public static Drawable roundShapeDrawable(int color, @IntRange(from = 0, to = 100) int alpha, int width, int height, float radius) {ShapeDrawable shapeDrawable = new ShapeDrawable();// 外部矩形的8个半圆角半径,一个圆角由2个半圆角组成float[] externalRound = {radius, radius, radius, radius, radius, radius, radius, radius};// 内部矩形与外部矩形的距离RectF distanceRectF = null;//new RectF(10, 10, 10, 10);// 内部矩形的8个半圆角半径值float[] insideRound = null;//{10, 10, 10, 10, 10, 10, 10, 10};RoundRectShape roundRectShape = new RoundRectShape(externalRound, distanceRectF, insideRound);shapeDrawable.setShape(roundRectShape);shapeDrawable.setAlpha((int) (alpha * 2.55));shapeDrawable.getPaint().setAntiAlias(true);shapeDrawable.getPaint().setDither(true);shapeDrawable.getPaint().setColor(color);shapeDrawable.setIntrinsicWidth(width);shapeDrawable.setIntrinsicHeight(height);return shapeDrawable;}
}

3.最后就是在代码中动态设置小部件的背景颜色、圆角、颜色、透明度

// 背景颜色
int color = Color.BLUE;
// 透明度
int alpha = 50;
// 背景宽度
int width = context.getResources().getDimensionPixelSize(R.dimen.dp_250);
// 背景高度
int height = context.getResources().getDimensionPixelSize(R.dimen.dp_400);
// 圆角角度
int radius = context.getResources().getDimensionPixelSize(R.dimen.dp_5);
// 绘制背景
Drawable drawable = DrawableUtils.roundShapeDrawable(color, alpha, width, height, radius);
// 将绘制好的背景转换为Bitmap
Bitmap bitmap = DrawableUtils.drawableToBitmap(drawable);
// 将转换好的Bitmap设置到ImageView上
views.setImageViewBitmap(R.id.iv_appwidget_bg, bitmap);

特别注意【背景宽度、背景高度】是跟小部件配置文件中的

android:minWidth="@dimen/dp_250"宽度

android:minHeight="@dimen/dp_400"高度

是一致的

小部件配置信息

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:initialKeyguardLayout="@layout/layout_app_widget"android:initialLayout="@layout/layout_app_widget"android:minWidth="@dimen/dp_250"android:minHeight="@dimen/dp_400"android:previewImage="@drawable/example_appwidget_preview"android:resizeMode="vertical"android:updatePeriodMillis="86400000"android:widgetCategory="home_screen"/>

Android 桌面小部件的背景透明度及颜色的动态实现相关推荐

  1. Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3)

     Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3) Android桌面小部件AppWidget比较常用的场景就是音乐播放器,音乐播放器虽然通常在后台播放,但需要 ...

  2. kwgt 歌词_这8款Android桌面小部件,能让你的Android好用很多倍

    安卓手机一直以来以其可玩性高而受到欢迎,即使是简单的桌面小部件,也有人能玩出花来.强大如 Zooper Widget 和 KWGT 等复杂且定制性极强的美化类桌面插件应用,抑或是朴实无华但又必不可少的 ...

  3. 自定义Android桌面小部件

    /   今日科技快讯   / 1月12日,恒大官宣,恒大汽车恒驰5首车已正式下线,比原计划提前12天.这是恒大汽车推出的第一款车型,首车下线意味着恒驰进入量产倒计时阶段.消息出来后,当日恒大汽车收涨3 ...

  4. 桌面时钟代码_被遗忘的手机桌面小部件

    iOS 和 Android,两个移动时代的操作系统在历经十多年发展后,成熟度之高已经很难再找出大的短板. 如今,这两个系统相似的部分,大概比它们不相似的地方还要多得多.从早期的下拉通知栏,再到现在的侧 ...

  5. Android AppWidget(桌面小部件-音乐播放动画)

    桌面小部件基础篇:Android AppWidget (桌面小部件) 音乐播放 (动画实现)     一个音乐播放的柱状图(不会上传动图,自行脑补) 思路方案: 1,自定义View,widget 仅支 ...

  6. 手机bootstrap搜索框_这些桌面小部件,Android 手机可不能错过

    在开源.可玩性较高的安卓系统上,小部件呈现了与 iOS 不一样的魅力.它高度的灵活自由,使得安卓手机用户,更能对自己的手机桌面进行个性化的定制. 可在细数当下众多的安卓小部件里,哪些能在保持实用性的同 ...

  7. android 仿苹果 小组件,安卓仿ios14桌面小部件

    安卓仿ios14桌面小部件,是一个可以让安卓手机的界面看起来像苹果界面的软件,功能非常强大,它可以提供多种不同主题的壁纸桌面,随心选择,设置后的效果还是非常不错的,很有高级感,操作简单,上手也很快. ...

  8. Android AppWidget(桌面小部件)

    使用Android Studio 开发桌面小部件,闲来无事,自己动手做一个 AppWidget是应用程序窗口小部件(Widget)是微型的应用程序视图 官方文档链接:http://www.androi ...

  9. Android Widget——实现桌面小部件

    前言 在Android手机中,我们经常会看到各种桌面小部件,天气.音乐播放器.时间表盘等,这些都是桌面小部件的实例.本篇主要介绍桌面小部件开发的一些最基础的知识. Widget介绍 Widget并没有 ...

  10. android remoteview 缓存,关于RemoteView的一点愚见(实现桌面小部件)

    RemoteView中的应用除了有通知栏的自定义之外,还有桌面小部件也是通过RemoteView以及AppWidgetProvider来完成的. 实际上AppWidgetProvider是一个广播,即 ...

最新文章

  1. mysql count 不等于_Mysql 不同的 count 区别
  2. PWA(Progressive Web App)入门系列:(二)相关准备
  3. 微型计算机性能指标以及分类
  4. 这些.Net的细节(面试秘笈),你都知道了吗?
  5. mysql q4m_Mysql Q4M 队列操作封装(二)
  6. 自然语言处理 matlab,程序员罗杰
  7. 中关村十大AI研究院 | 盘点
  8. 从零开始山寨Caffe·贰:主存模型
  9. 思维导图中主题连接线格式修改教程
  10. Java基础加强重温_06:可变参数、集合工具类Collections类、冒泡排序、Map集合、Map集合遍历、Map案例、LinkedHashMap集合、图书管理系统
  11. 达梦数据库的服务启动
  12. mysql临时表在哪找_MySQL 中的临时表
  13. 如何通过网络遥测(Network Telemetry)技术实现精细化网络运维
  14. 2016年开源巨献:百度71款开源项目
  15. 宇视2016c语言招聘试题,宇视科技2016年招聘试题.docx
  16. MySQL的循环语句使用总结
  17. 什么人适合学习嵌入式开发?
  18. Linux vi 文本代码时显示行号或不显示行号
  19. linux卸载字体库,在Ubuntu中删除不必要的字体并安装MS核心字体 | MOS86
  20. USB 对拷线材 YYDS

热门文章

  1. 教你如何在交换机上查询并看懂光模块DDM信息
  2. HarmonyOS鸿蒙学习笔记(1)基于eTS的入门应用结构简单梳理
  3. php地理位置打卡,定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
  4. excel一列求和_EXCEL表格怎么自动求和?4种典型批量求和套路
  5. Shiro源码剖析——Subject的创建与获取(一次完整的请求执行流程)
  6. Python 练习005 ——疯狂填词程序
  7. 个人官网第8次升级(新功能、用户体验、修复bug、系统优化)
  8. C语言数字图像处理---ZPHOTOENGINE算法库使用
  9. 区块链单笔交易字段解释
  10. C#-Winform - 调用笔记本摄像头实现拍照并保存