Android Drawablw

<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)]

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

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

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值