在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”:

这里写图片描述

主要是这一句
@drawable/progress_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进行这些例如背景颜色,虚线等的自定义。不过,这是最便捷的方法了~

更多相关文章

  1. Android 获取远程图片与本地图片缓存
  2. android 异步获取图片
  3. Android LCD背景颜色和边框颜色的可控制
  4. Android大图片内存清理
  5. Android 如何在关于手机界面添加个图片
  6. android Lru图片缓存管理方案
  7. Android 中动态提取图片中颜色作为主题色
  8. ListView有背景图片或背景颜色,那么在滑动ListView的时候,ListView
  9. Android 获取并显示远程图片 Picasso框架的使用(二)

随机推荐

  1. [置顶] Android入门系列一(Android学习方
  2. Android(安卓)Adapter详解(1)
  3. Android(安卓)事件处理
  4. Android(安卓)AsyncTask解析
  5. android日志分析与记录.
  6. 理解Android的菜单
  7. Android高手进阶教程(四)之----Android(
  8. .net程序员转战android第二篇---牛刀小试
  9. Android(安卓)NFS文件系统挂载遇到的问题
  10. Android应用程序启动过程源代码分析(1)