android中shape,selector,layer-list的使用小结
在android日常开发中,使用自定义drawable文件夹,使用shape,selector,layer-list绘制出drawable文件进行应用是十分常见的。需要稍微总结下:
1、shape的使用
顾名思义shape是形状的意思,就是android中提供的自定义绘制drawable形状的一个机制,我跟ios讨论过,他们没有这个,嘿嘿黑,顿时觉得很方便有木有。
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" <corners --四个角的弧度 --> android:radius="10dp" android:topLeftRadius="2dp" android:topRightRadius="2dp" android:bottomLeftRadius="2dp" android:bottomRightRadius="2dp"/> <gradient -- 开始渐变 --> android:startColor="@android:color/white" android:centerColor="@android:color/blue" android:endColor="@android:color/black" android:useLevel="true" android:type="linear" android:angle="45" android:type="radial" android:centerX="0" android:centerY="0" android:gradientRadius="90"/> <padding android:left="2dp" android:top="2dp" android:right="2dp" android:bottom="2dp"/> <size android:width="50dp" android:height="50dp"/> <solid android:color="@android:color/white"/> <stroke android:width="2dp" android:color="@android:color/black" -- 默认为0,虚线的宽度,0即为实线 --> android:dashWidth="1dp" android:dashGap="2dp"/> shape>
2、selector的使用
selector顾名思义就是选择的意思。多用在切换状态时候,切换drawable或者文字颜色。
<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/defaultimg" /> <item android:state_window_focused="false" android:drawable="@drawable/defaultimg" /> <item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/defaultimg2" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/defaultimg3" /> <item android:state_selected="true" android:drawable="@drawable/defaultimg4" /> <item android:state_focused="true" android:drawable="@drawable/defaultimg5" /> <item android:state_checked="true" android:drawable="@drawable/addselect"/>selector> 是不是很方便,我们直接在写xml文件就可以定义好按钮的状态。是不是再也不用考虑在java代码中切换那些样式了。对了,这个ios的也没有哟哟哟
3、layer-list的使用
其实就是个数据集合,可以作为adapter的数据集,当然可以实现两张图片的叠加。看下进度条中的源码也是通过layer-list来实现的 style=”@android:style/Widget.ProgressBar.Horizontal”:
主要是这一句
看下源码:
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#ff9d9e9d" android:centerColor="#ff5a5d5a" android:centerY="0.75" android:endColor="#ff747674" android:angle="270" /> shape> item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#80ffd300" android:centerColor="#80ffb600" android:centerY="0.75" android:endColor="#a0ffcb00" android:angle="270" /> shape> clip> item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#ffffd300" android:centerColor="#ffffb600" android:centerY="0.75" android:endColor="#ffffcb00" android:angle="270" /> shape> clip> item>layer-list>
总结:可以看到的是,这里也是用layer-list实现两张图片的叠加来实现进度条的效果。
那么我们自定义水平进度条的样式,嘿嘿黑,其实很简单。
1、进度条的xml,用自己的style
<ProgressBar android:id="@+id/progress_count" style="@style/mProgress_horizontal" android:layout_width="match_parent" android:layout_height="45px" android:layout_marginLeft="40px" android:layout_marginRight="40px" android:progress="0" android:secondaryProgress="10" />
2、其实你看出来了,那个style是重点,用自己的”android:progressDrawable”
3、是的,就是这个layer-list,我们复制源码,改下颜色。是的,你只需要替换下item为图片或者,你完全只需要改成你心仪的色值。
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="5dip" /> <gradient android:startColor="@color/linecolor" android:centerColor="@color/textcolorgray" android:centerY="0.75" android:endColor="@color/textcolorgray" android:angle="270" /> shape> item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:startColor="@color/blue" android:centerColor="@color/blue" android:centerY="0.75" android:endColor="@color/blue" android:angle="270" /> shape> clip> item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:startColor="@color/blue" android:centerColor="@color/blue" android:centerY="0.75" android:endColor="@color/blue" android:angle="270" /> shape> clip> item>layer-list>
4、还有呢?目前就用到这些,当做笔记记录下来,以备不时之需,如果你有更多的使用场景或者需要加入进来的标签,欢迎拍砖~我的内心是欣喜的,因为ios那边不能使用这些便捷的标签。当然我们可以想象使用java进行这些例如背景颜色,虚线等的自定义。不过,这是最便捷的方法了~
更多相关文章
- Android 获取远程图片与本地图片缓存
- android 异步获取图片
- Android LCD背景颜色和边框颜色的可控制
- Android大图片内存清理
- Android 如何在关于手机界面添加个图片
- android Lru图片缓存管理方案
- Android 中动态提取图片中颜色作为主题色
- ListView有背景图片或背景颜色,那么在滑动ListView的时候,ListView
- Android 获取并显示远程图片 Picasso框架的使用(二)