当前位置: 首页 > 后端技术 > Java

Android中的Drawable(二)

时间:2023-04-01 21:31:32 Java

PS:本文为转载文章,原文可读性会更好,文末有原文链接目录1、LayerDrawable2、StateListDrawable3、LevelListDrawable1,LayerDrawable本文基于Android中的Drawable(一)本文继续撰写中。LayerDrawable对应的xml文件的标签是layer-list,是一个层次化的Drawable集合。通过将不同的Drawable放置在不同的图层上,可以实现一种叠加。effect,我们先写一个demo,然后解释layer-list标签中的属性或者子标签的属性。(1)在drawable文件夹下创建一个my_layer_list.xml文件;<形状android:shape="矩形">(2)Activity布局文件activity_main.xml;运行结果如下;看我们的demo,在my_layer_list.xml文件中有一个layer-list标签,还会有一个item标签,一个item标签其实就是一个Drawable;layer-list是一个层级概念,后面的item会覆盖前面的item。通过使用多个项目,可以实现逐层效果item标签的属性比较多,下面列举一些我们开发中常用的;1)android:top:相对于View顶部的内部偏移量。2)android:bottom:相对于View底部的内部偏移量。3)android:left:相对于View的左内部偏移量。4)android:right:相对于View内部右偏移量。5)android:drawable:引用现有的Drawable。2、StateListDrawableStateListDrawable对应xml布局文件中的selector标签,表示Drawables的集合。每个Drawable对应View的一个状态。系统会根据View的状态选择合适的Drawable。StateListDrawable主要用来设置被点击View的背景。为了更好的理解,我们先写一个demo;(1)在drawable文件夹下新建my_selector.xml文件;<选择器xmlns:android="http://schemas.android.com/apk/res/android">(2)在activity的布局文件activity_main.xml引用my_selector.xml文件;(3)对名为MainActivity的Activity做点击事件处理;publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}publicvoidonClick(Viewv){}}一开始程序运行的结果如下;点击“请点击此按钮”按钮后效果图如下;从上面的demo我们可以了解到,如果我们不点击“请点击这个按钮”这个按钮,那么默认会选择图片作为这个按钮的背景图,对吧?如果我们点击这个按钮,那么使用image2作为按钮的背景图片,对吧?这里我们也了解到selector标签下的子标签item也是一种Drawable2,1)selector标签的属性android:constantSize:这里代表的是StateListDrawable的内在大小是否不随其状态的改变。它有2个值,一个为true,一个为false,默认值为false;true表示StateListDrawable的固有大小保持不变。这时,它的intrinsicsize是里面所有Drawables的固有大小的最大值,false会随着状态的变化而变化。android:dither:是否开启抖动效果,在Android中的Drawable(一)一文中有提到。android:variablePadding:StateListDrawable的padding表示是否随着它的state变化而变化,true表示会随着state变化而变化,false表示StateListDrawable的padding是里面所有Drawables的padding的最大值。2.2)selector标签的子标签项的属性android:drawable:表示一个已有的Drawable的资源id。android:state_pressed:表示按下状态,比如View按下后没有释放时的状态。android:state_focused:表示View已经获得焦点。android:state_selected:表示View被选中。android:state_checked:视图被选中。android:state_enabled:View处于可用状态,即可以点击的状态。3、LevelListDrawablexml文件中LevelListDrawable对应的标签是level-list,也代表一个Drawable集合。集合中的每个Drawable都有一个层次的概念。根据层级不同,LevelListDrawable会切换到对应的Drawable。好吧,为了方便理解,我也写个demo来演示一下;(1)在drawable文件夹下新建my_level_list.xml文件;(2)在Activity的xml布局文件activity_main.xml中添加对my_level_list.xml的引用;<?xmlversion="1.0"encoding="utf-8"?>(3)Activity子类MainActivity对my_level_list.xml文件处理;公共类MainActivity扩展AppCompatActivity{ImageViewmIv;EditTextmEt;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mIv=findViewById(R.id.iv);mEt=findViewById(R.id.et);}publicvoidonClick(Viewv){intiLevel=0;Stringlevel=mEt.getText().toString();LevelListDrawablelevelListDrawable=(LevelListDrawable)mIv.getDrawable();尝试{iLevel=Integer.valueOf(level);}赶上(异常e){iLevel=0;}levelListDrawable.setLevel(iLevel);}}我们不急着跑程序,先看img_3图片是什么样子的(如下图);程序开始运行时,如下;在文本框中输入13,然后点击“确定”按钮,显示效果如下;看上面my_level_list.xml文件,当它的最低等级是10,最高等??级是15时,如果我们输入13,就会显示img_3的图片;如果我们在文本框中输入4,就会显示img_1的图片,因为引用img_1的Drawable最低级别是1,最高级别是5,输入的4刚好在1-5之间。在my_level_list.xml文件中,在上面的语法中,每个item代表一个Drawable,并且有对应的level范围,由android:minLevel和android:maxLevel属性来指定,最小值和最大值之间的level会对应到此项中的Drawable;Drawable的level是有范围的,它的level范围是0-10000,默认值0也是最低level,最高level是10000;如果使用View作为背景,可以通过Drawable的setLevel方法设置不同的level来切换具体的Drawable。