Android Drawablw

本文详细介绍了Android中的Drawable资源,包括StateListDrawable的状态切换、ClipDrawable的裁剪功能以及shapeDrawable的几何图形定义。此外,还展示了如何使用这些资源创建进度条和理解其在界面状态控制中的作用。最后提到阅读源码对程序员技能提升的重要性,以及提供了一份全面的学习资料链接。
摘要由CSDN通过智能技术生成

<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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合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)]

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值