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进行这些例如背景颜色,虚线等的自定义。不过,这是最便捷的方法了~
更多相关文章
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- android 使用html5作布局文件: webview跟javascript交互
- Android(安卓)Resource介绍和使用
- "Failed to fetch URL https://dl-ssl.google.com/android/repos
- 使用NetBeans搭建Android开发环境
- android 零星调试笔记