Android Kotlin/Java 动态设置 shape/drawable 等状态效果

和尚我最近遇到一个小需求,程序里面有个别页面,需要动态的调整某个页面的样式,包括一键变灰等效果。

以前页面是用 shape 和 drawable 之类实现的效果。现在需要用 Kotlin/Java 代码实现动态修改。由于和尚我技术浅浅,仅整理一下遇到一些坑。

日常应用的样式:

1. 圆角边框

默认 shape.xml 方式:

现 Kotlin/Java 方式动态修改边框颜色:

Tips: GradientDrawable 对象可设置 shape 边框属性(矩形/椭圆等)、stroke 边框宽度和颜色、cornerRadius 圆角角度、color 填充背景色。

2. 圆角边框填充颜色

默认 shape.xml 方式:

现 Kotlin/Java 方式动态修改边框颜色及填充背景色:

3. 圆角边框填充颜色,点击变更背景色

默认 shape.xml 方式:

现 Kotlin/Java 方式动态修改边框颜色填充背景色,点击变更背景色:

Tips: StateListDrawable 设置 View 绘制不同状态背景图片,和尚我测试中,发现需要设置点击事件或者 Pressed/Focused 状态,和尚我认为如果只是设置 StateListDrawable 默认是 normal 样式,不会有点击效果。

4. 圆角边框填充颜色,点击变更背景色及文字颜色

默认 color.xml 方式:

现 Kotlin/Java 方式动态修改边框颜色填充背景色,点击变更背景色及文字颜色:

Tips: 和尚我建议在编辑 color.xml 时,新建在 color 资源文件夹下。ColorStateList 对象设置文字点击时不同状态等文字效果。

5. 部分圆角边框填充颜色

默认 shape.xml 方式:

现 Kotlin/Java 方式动态修改部分圆角边框:

Tips: GradientDrawable 对象中,若设置四个圆角一致时,可设置 cornerRadius 属性;若设置部分圆角时,可设置 cornerRadii 属性,该属性包括 8 个 float 参数 (左上[X_Radius,Y_Radius],右上[X_Radius,Y_Radius],右下[X_Radius,Y_Radius],左下[X_Radius,Y_Radius]) 且只有设置 [X_Radius,Y_Radius] 两个参数时起作用。

6. 图标绘色

默认设置tint属性:

现 Kotlin/Java 方式对图标绘色:

Tips: 用该方法绘制颜色时,建议不要设置图片的 tint 属性。

7. 图片灰度

设置 ColorMatrix 对象的 Saturation 属性:

xml 布局效果

Kotlin 代码效果

一键灰度

GitHub 实例

下面是和尚我的公众号,欢迎闲来吐槽~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180505G11OUJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券