Android中View(视图)绘制不同状态背景图片原理深入分析以及State

本文原创,转载请注明出处:

今天继续给大家分享下View的相关知识,重点有一下两点:

1、View的几种不同状态属性

2、如何根据不同状态去切换我们的背景图片。

开篇介绍:android背景选择器selector用法汇总

对Android开发有经验的同学,对<selector>节点的使用一定很熟悉,该节点的作用就是定义一组状态资源图片,使其能够

在不同的状态下更换某个View的背景图片。例如,如下的hello_selection.xml文件定义:

<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android=""> <!– 触摸时并且当前窗口处于交互状态 –><item android:state_pressed="true" android:state_window_focused="true" android:drawable= "@drawable/pic1" /> <!– 触摸时并且没有获得焦点状态 –><item android:state_pressed="true" android:state_focused="false" android:drawable="@drawable/pic2" /><!–选中时的图片背景–><item android:state_selected="true" android:drawable="@drawable/pic3" /><!–获得焦点时的图片背景–><item android:state_focused="true" android:drawable="@drawable/pic4" /><!– 窗口没有处于交互时的背景图片 –><item android:drawable="@drawable/pic5" /> </selector>

其实,前面说的xml文件,最终会被Android框架解析成StateListDrawable类对象。

知识点一:StateListDrawable类介绍

类功能说明:该类定义了不同状态值下与之对应的图片资源,即我们可以利用该类保存多种状态值,多种图片资源。

常用方法为:

public voidaddState(int[] stateSet,Drawabledrawable)

功能: 给特定的状态集合设置drawable图片资源

//初始化一个空对象StateListDrawable stalistDrawable = new StateListDrawable();//获取对应的属性值 Android框架自带的属性 attrint pressed = android.R.attr.state_pressed;int window_focused = android.R.attr.state_window_focused;int focused = android.R.attr.state_focused;int selected = android.R.attr.state_selected;stalistDrawable.addState(new int []{pressed , window_focused}, getResources().getDrawable(R.drawable.pic1));stalistDrawable.addState(new int []{pressed , -focused}, getResources().getDrawable(R.drawable.pic2);stalistDrawable.addState(new int []{selected }, getResources().getDrawable(R.drawable.pic3);stalistDrawable.addState(new int []{focused }, getResources().getDrawable(R.drawable.pic4);//没有任何状态时显示的图片,我们给它设置我空集合stalistDrawable.addState(new int []{}, getResources().getDrawable(R.drawable.pic5);

上面的“-”负号表示对应的属性值为false

当我们为某个View使用其作为背景色时,会根据状态进行背景图的转换。

public booleanisStateful()

功能: 表明该状态改变了,对应的drawable图片是否会改变。

注:在StateListDrawable类中,该方法返回为true,显然状态改变后,我们的图片会跟着改变。

知识点二:View的五种状态值

一般来说,Android框架为View定义了四种不同的状态,这些状态值的改变会引发View相关操作,例如:更换背景图片、是否

触发点击事件等;视

视图几种不同状态含义见下图:

其中selected和focused的区别有如下几点:

1,我们通过查看setSelected()方法,来获取相关信息。

SDK中对setSelected()方法—-对于与selected状态有如下说明:

public voidsetSelected(boolean selected)

Since:

同生天地间,为何我不能。

Android中View(视图)绘制不同状态背景图片原理深入分析以及State

相关文章:

你感兴趣的文章:

标签云: