网站首页 > 编程文章 正文
typora-root-url: ./img
Drawable 那么多种,但是场景就这么多
一、前言
本文为本系列的下篇,上篇可以查看我头条号的另外一篇文章,查看 Drawable 的更多使用技巧。
三、具体实现
3.7 一个带按下效果的圆角按钮
这个没啥好说的,结合上面的效果就可以做到。你可以选择将它们写在不同的 Drawable 中,也可以在一个 xml 文件中,使用不同 item 来完成。Item 标签是可以支持内部再嵌套一个 Drawable 的。
3.8 带按下动画
按下效果除了使用 <selector> 做一个变色的效果之外,在 Api Level 21 之后,可以尝试使用 StateListAnimator 来实现一个 Material Design 的按下效果。
具体细节可以看看我之前的一篇文章:《利用 StateListAnimator 为你的点击加个动画吧!》
StateListAnimtor 使用起来非常的简单:
在 res 中创建一个 animator 目录。
在其中创建一个 xml 资源文件,就是一个 <selector/> 。
在 xml 资源中使用 <selector/> 中,定义我们 View 切换状态时候的动画,其实就是一个个 <objectAnimator/>。
最终将定义好的 animtor 通过 View 的
setStateListAnimator()
方法或者android:stateListAnimator
属性,设置到 View 上。
举个例子。
首先在 /res/animtor 目录下,创建一个 btn_press_animator.xml
文件。
可以看到,和 StateListDrawable 一样,它也是通过 android:state_xxx
属性来定义不同的 Animator 的,如果存在多个 Animator ,可以使用 <set/> 标签将其包裹起来。 这里只是简单的在 state_pressed 的时候,做了一个缩小的动画。
然后,定义一个 View,为其设置属性 android:stateListAnimator="@animator/btn_press_animator"
。
来看看运行的效果:
3.9 三角形的 Drawable
假如有类似气泡提示的效果,如下图。
这样的效果,除了使用 9patch 来实现之外,还可以拿两个 Drawable 来拼接实现,这就需要一个圆角的矩形和一个三角的 Drawable。
三角 Drawable 的实现思路很清奇,是使用一个矩形的 shape ,通过使用 rotate 实现的旋转,来达到尖角的效果。
这个例子,就是上图的实现效果,是一个黄色的倒三角。如果想要的是一个正三角,只需要改变旋转的角度就可以了。
3.10 Tint 着色的 Drawable
在 Drawable 中,如果使用的是 BitmapDrawable 或者 NinePatchDrawable(9patch) 的资源的话,可以使用 android:tint 属性为其着色。
默认情况下,待着色的图片资源,会将其所有有颜色地方,都着色成我们指定的颜色,但是会保留透明度。
效果图如下,上面是原图,下面是使用 tint 之后的效果:
前面这里给的是 tint 默认的效果,还可以通过 android:tintMode 指定成不同的着色效果,例如下面将 android:tintMode 指定成 screen 之后,效果就完全不一样了。
3.11 铺平的 Drawable
有时候,作为一些有规则的图片的背景,可以使用一张很小的图片,然后设定 android:tileMode 属性,为其设定一个平铺的效果。
tileMode 可以指定多个属性值,用于指定不同的效果,以下就是两个比较常用的,上图使用的是 repeat ,下图使用的是 mirror。
3.12 状态可控的层级 Drawable
如果想要一个 ImageView 上,根据不同的条件显示不同的 Drawable ,可以使用 <level-list/> 。从名字上就可以看出它是一个带层级的 Drawable 组合,和 <selector/> 很像,但是区别在于它的显示状态是我们逻辑可控的。最常见的例子是拿它实现一个开关的灯泡,两态的图片,一个表示开灯,一个表示关灯,相信大家应该都见过例子。
今天举一个例子,给某个图标加红点的逻辑。当然我们也可以使用通过一个 FrameLayout 来实现,但是今天我们试试用 <level-list/> 来实现它。
这里使用一个 <level-list/> ,内部根据不同的 maxLevel 和 minLevel 来控制范围,这里只有两态,所以直接让它们取值一致。红点使用 <layer-list> 做了一个层叠,在右上角上,直接画了一个大小为 5dp 的红色圆点。
最终我们可以通过 ImageView 的
setImageLevel()
方法来控制显示的内容。四、结语
到这里基本上涵盖了 Drawable 大部分的使用场景,在实际例子中学东西是印象最深刻的。当然,Drawable 的使用不止这些,还有一些例如拿 ClipDrawable 来实现一个切割进度的效果之类的,这种还需要写逻辑代码,就不在本文的范围内了,本文主要介绍一些静态能实现的效果。
你只需要掌握最基本的规则,什么 Drawable 能实现什么效果,具体碰到实际需求的时候,再来细致的研究,基本上微调一下就可以使用。
如果你还又什么更有意思的 Drawable 使用技巧,欢迎在文末留言,我们一起讨论一下,如有需要,会持续更新。
我准备了一些我整理的学习资料,包含:Android反编译、算法、设计模式、kotlin、Python、爬虫、虚拟机、Linux、计算机网络、Web项目源码。如果有兴趣可以私信我。
猜你喜欢
- 2024-10-22 产品经理小技术:图片素材随手找,原型设计快又好
- 2024-10-22 Android设置Button按钮的点击,触碰状态效果
- 2024-10-22 AndroidStudio安卓原生开发_UI高级_StateListDrawable状态选择器
- 2024-10-22 Activity初窥门径(初窥门径是什么意思)
- 2024-10-22 Litho的使用及原理剖析(lithiumtools)
- 2024-10-22 Android图片加载框架哪家强?当然是FaceBook出品的Fresco
- 2024-10-22 Android Pixel 预览版(pixel preview)
- 2024-10-22 Android 属性动画资源(android属性动画平移)
- 2024-10-22 Android屏幕适配方案(android 屏幕适配方案)
- 2024-10-22 关于Android系统各个版本之间的新功能
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)