Android 桌面小部件的背景透明度及颜色的动态实现
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 桌面小部件的背景透明度及颜色的动态实现相关推荐
- Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3)
Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3) Android桌面小部件AppWidget比较常用的场景就是音乐播放器,音乐播放器虽然通常在后台播放,但需要 ...
- kwgt 歌词_这8款Android桌面小部件,能让你的Android好用很多倍
安卓手机一直以来以其可玩性高而受到欢迎,即使是简单的桌面小部件,也有人能玩出花来.强大如 Zooper Widget 和 KWGT 等复杂且定制性极强的美化类桌面插件应用,抑或是朴实无华但又必不可少的 ...
- 自定义Android桌面小部件
/ 今日科技快讯 / 1月12日,恒大官宣,恒大汽车恒驰5首车已正式下线,比原计划提前12天.这是恒大汽车推出的第一款车型,首车下线意味着恒驰进入量产倒计时阶段.消息出来后,当日恒大汽车收涨3 ...
- 桌面时钟代码_被遗忘的手机桌面小部件
iOS 和 Android,两个移动时代的操作系统在历经十多年发展后,成熟度之高已经很难再找出大的短板. 如今,这两个系统相似的部分,大概比它们不相似的地方还要多得多.从早期的下拉通知栏,再到现在的侧 ...
- Android AppWidget(桌面小部件-音乐播放动画)
桌面小部件基础篇:Android AppWidget (桌面小部件) 音乐播放 (动画实现) 一个音乐播放的柱状图(不会上传动图,自行脑补) 思路方案: 1,自定义View,widget 仅支 ...
- 手机bootstrap搜索框_这些桌面小部件,Android 手机可不能错过
在开源.可玩性较高的安卓系统上,小部件呈现了与 iOS 不一样的魅力.它高度的灵活自由,使得安卓手机用户,更能对自己的手机桌面进行个性化的定制. 可在细数当下众多的安卓小部件里,哪些能在保持实用性的同 ...
- android 仿苹果 小组件,安卓仿ios14桌面小部件
安卓仿ios14桌面小部件,是一个可以让安卓手机的界面看起来像苹果界面的软件,功能非常强大,它可以提供多种不同主题的壁纸桌面,随心选择,设置后的效果还是非常不错的,很有高级感,操作简单,上手也很快. ...
- Android AppWidget(桌面小部件)
使用Android Studio 开发桌面小部件,闲来无事,自己动手做一个 AppWidget是应用程序窗口小部件(Widget)是微型的应用程序视图 官方文档链接:http://www.androi ...
- Android Widget——实现桌面小部件
前言 在Android手机中,我们经常会看到各种桌面小部件,天气.音乐播放器.时间表盘等,这些都是桌面小部件的实例.本篇主要介绍桌面小部件开发的一些最基础的知识. Widget介绍 Widget并没有 ...
- android remoteview 缓存,关于RemoteView的一点愚见(实现桌面小部件)
RemoteView中的应用除了有通知栏的自定义之外,还有桌面小部件也是通过RemoteView以及AppWidgetProvider来完成的. 实际上AppWidgetProvider是一个广播,即 ...
最新文章
- mysql count 不等于_Mysql 不同的 count 区别
- PWA(Progressive Web App)入门系列:(二)相关准备
- 微型计算机性能指标以及分类
- 这些.Net的细节(面试秘笈),你都知道了吗?
- mysql q4m_Mysql Q4M 队列操作封装(二)
- 自然语言处理 matlab,程序员罗杰
- 中关村十大AI研究院 | 盘点
- 从零开始山寨Caffe·贰:主存模型
- 思维导图中主题连接线格式修改教程
- Java基础加强重温_06:可变参数、集合工具类Collections类、冒泡排序、Map集合、Map集合遍历、Map案例、LinkedHashMap集合、图书管理系统
- 达梦数据库的服务启动
- mysql临时表在哪找_MySQL 中的临时表
- 如何通过网络遥测(Network Telemetry)技术实现精细化网络运维
- 2016年开源巨献:百度71款开源项目
- 宇视2016c语言招聘试题,宇视科技2016年招聘试题.docx
- MySQL的循环语句使用总结
- 什么人适合学习嵌入式开发?
- Linux vi 文本代码时显示行号或不显示行号
- linux卸载字体库,在Ubuntu中删除不必要的字体并安装MS核心字体 | MOS86
- USB 对拷线材 YYDS
热门文章
- 教你如何在交换机上查询并看懂光模块DDM信息
- HarmonyOS鸿蒙学习笔记(1)基于eTS的入门应用结构简单梳理
- php地理位置打卡,定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
- excel一列求和_EXCEL表格怎么自动求和?4种典型批量求和套路
- Shiro源码剖析——Subject的创建与获取(一次完整的请求执行流程)
- Python 练习005 ——疯狂填词程序
- 个人官网第8次升级(新功能、用户体验、修复bug、系统优化)
- C语言数字图像处理---ZPHOTOENGINE算法库使用
- 区块链单笔交易字段解释
- C#-Winform - 调用笔记本摄像头实现拍照并保存