在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. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. android 使用html5作布局文件: webview跟javascript交互
  6. Android(安卓)Resource介绍和使用
  7. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  8. 使用NetBeans搭建Android开发环境
  9. android 零星调试笔记

随机推荐

  1. android EditText设置弹出数字输入法键盘
  2. Android 异步从网络上下载图片
  3. android设置背景图片透明
  4. Android EditView 阻止默认弹出键盘
  5. android页面跳转
  6. android之【ArrayAdapter】
  7. [android] android framework中的 PhoneN
  8. ImageView 缩放
  9. 不留近期任务痕迹,以及让activity在任务栈
  10. 介绍本人的一个Android项目(附源代码)