<item android:state_pressed=[“true”|“false”] android:drawable=“@drawable/botton_pressed”/>
可支持的状态属性:
state_focused: 是否处于已得到获得焦点状态
state_window_focused: 窗口是否处于已得到焦点状态
state_enabled: 是否处于可用状态
state_checkable: 是否处于可勾选状态
state_checked: 是否处于以勾选状态
state_selected: 是否处于已被选中状态
state_pressed: 是否处于已被按下状态
state_active: 是否处于激活状态,
state_first: 是否处于开始状态
state_middle: 是否处于中间状态
state_last: 是否处于结束状态
代码示例
我们就根据最开始的示例图,做一个按钮的背景状态切换
首先我们先做两个不同颜色的圆形背景图
1.在drawable目录下创建一个shape_btn_pressed.xml文件,写入下面的代码
<shape xmlns:android=“http://schemas.android.com/apk/res/android”
android:shape=“oval”>
2.再创建一个shape_btn_none.xml的文件,复制上面的代码,将颜色更改为另一种颜色,好显示两种颜色状态。
3.在drawable目录下创建一个selector_btn.xml文件,写入下面的代码,设置按钮被按下时的drawable属性,即可看到按钮的状态变化。
效果展示
讲完StateListDrawable,我们再来看一看ClipDrawable
ClipDrawable 资源
ClipDrawable就是从位图上剪下一个部分的图片片段,在XML文件中的根节点为
先看一下ClipDrawable的三个属性
-
clipOrietntion:设置剪切的方向,可以设置水平和竖直2个方向
-
gravity:从那个位置开始裁剪
设置gravity为top,从上至下加载。
设置gravity为bottom,从下至上加载。
设置gravity为center,从中间到四面八方加载。
设置gravity为center_horizontal,从中间到两边加载。
设置gravity为center_vertical,从中间到两边加载。
设置gravity为right,从右至左加载。
设置gravity为left,从左至右加载。
- drawable:引用的drawable资源
ClipDrawable 对象可以调用setLevel(int level)方法来设置截取的区域大小 ,level可取0-10000之间,level为0,图片为空;level为10000时,图片全部截取。因此我们可以通过改变level值得方式,实现我们常见的进度条的效果。
代码示例
step1:先绘制一个进度条的图形资源progress_bar.xml,设置为一个矩形,添加圆角弧度
<shape xmlns:android=“http://schemas.android.com/apk/res/android”
android:shape=“rectangle”>
<size
android:width=“500dp”
android:height=“25dp” />
step2:在drawable目录下新建一个clip标签的文件,设置gravity为left,使进度条从左至右加载
<clip xmlns:android=“http://schemas.android.com/apk/res/android”
android:clipOrientation=“horizontal”
android:drawable=“@drawable/progress_bar”
android:gravity=“left”>
step3:在布局文件中添加一个ImageView,同时要在src属性中设置我们step2中的文件,
一定要在src中,如果是blackground的话会报空指针的!
<ImageView
android:layout_margin=“10dp”
android:background=“#e6e6e6”
android:id=“@+id/iv_image_clip_left”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:src=“@drawable/clip_left_01”/>
step4:在java文件中动态设置level的值,达到进度条变化的效果
public class MainActivity extends AppCompatActivity {
private ImageView mClipLeftImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mClipLeftImageView = (ImageView) findViewById(R.id.iv_image_clip_left);
mClipLeftImageView.setImageLevel(10000);
handler.postDelayed(runnable,2000);
}
private int number = 0;
private Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
if (number<=10000){
mClipLeftImageView.getDrawable().setLevel(number);
handler.postDelayed(runnable,20);
number+=100;
}
}
};
}
效果展示
这样我们就实现了一个简单的进度条效果,并且如果我们想要其他效果的进度条(比如从中间向两边,垂直的,等等)都可以通过修改gravity,clipOrientation的属性得到
看完上面两个drawable的例子,一定会发现我们都有用的标签的xml文件,其实这个就是shapeDrawable 资源,最后我们就再简单介绍一下shapeDrawable 资源
shapeDrawable 资源
shapeDrawable 资源比较简单,它就是用来定义一个基本的几何图形 ,根节点为,创建方法在上面的两个例子中已经提过
android:shape=[“rectangel”|“oval”|“line”|“ring”] //指定定义哪种类型的图形(矩形,椭圆,线条等)
其次它包含多个子标签定义不同属性
1
corners子标签 :定几何图形四个角的弧度,仅适用于rectangle
android:radius=“10dp” 圆角半径
android:bottomLeftRadius=“10dp” 左下半角的圆角半径
android:bottomRightRadius="10dp"右下半角的圆角半径
android:topLeftRadius="10dp"左上半角的圆角半径
android:topRightRadius="20dp"右上半角的圆角半径
2
gradient子标签:定义使用渐变色填充
android:type 渐变的类型 分为下面三种
linear 线性渐变,默认的渐变类型
radial 放射渐变,设置该项时,android:gradientRadius也必须设置
sweep 扫描性渐变
android:startColor 渐变开始的颜色
android:endColor 渐变结束的颜色
android:centerColor 渐变中间的颜色
android:angle 渐变的角度,线性渐变时才有效,必须是45的倍数,0表示从左到右,90表示从下到上
android:centerX 渐变中心的相对X坐标,在0.0到1.0之间,默认为0.5,表示在正中间
android:centerY 渐变中心的相对X坐标,在0.0到1.0之间,默认为0.5,表示在正中间
android:gradientRadius 渐变的半径,只有渐变类型为radial时才使用
android:userLevel 如果为true,则可在LevelListDrawable中使用
3
padding子标签:定义几何形状的内边距
android:left 左边距
android:right 右边距
android:top 上边距
android:botton 下边距
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
有帮助,可以扫码获取!!(备注:Android)**
[外链图片转存中…(img-7HNR1Nj5-1713713359842)]
最后
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
[外链图片转存中…(img-qu1fgcII-1713713359844)]
腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析
[外链图片转存中…(img-z8wnxpIf-1713713359846)]
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!