这一篇主要根据上一篇的大致说明,我相信如果看完这一篇,对开发自定义View将会有很大的帮助,
先介绍ColorStateList和StateListDrawable两个类:
ColorStateList说明:https://developer.android.com/reference/android/content/res/ColorStateList.html
StateListDrawable说明:https://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
这两个共同的特点是根据状态的变化变换View的背景,ColorStateList一般是背景颜色更新.比如:
XML file saved at res/color/button_text.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
然后在布局中使用:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
这个地方都是android原生Button来完成解析Button_text.xml来更新父类View的背景/前景的调整,或者其他调整!这个是字体会随着点击变色.
如果是自定义的View,如何来设定这些操作了,下面看一看
<1> : 新建一个android studio工程:PumpKinDrawable:
主类程序:
package org.durian.pumpkindrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import org.durian.pumpkindrawable.view.ButtonColorDrawable;
import org.durian.pumpkindrawable.view.PumpKinDrawableView;
public class PumpKinMainActivity extends AppCompatActivity {
private ImageView imageView1;
private ButtonColorDrawable bcdrawable;
private PumpKinDrawableView pumpkinview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pump_kin_main);
imageView1=(ImageView)findViewById(R.id.imagestate);
bcdrawable=new ButtonColorDrawable();
imageView1.setBackground(bcdrawable);
imageView1.setClickable(true);
pumpkinview=(PumpKinDrawableView)findViewById(R.id.pumpkinview);
pumpkinview.setClickable(true);
}
}
对应布局文件:里面的图片自行给一张放到drawable中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horiz