一个简单的android自定义view(Switch Button for api < 14)

1.编写主类

package com.sample.button;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.CompoundButton;

import com.example.buttonsample.R;

public class MyButton extends CompoundButton {

	public MyButton(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	private Drawable imgOFF;
	private Drawable imgON;

	public MyButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyButton, 0, 0);
		try {
			imgOFF = a.getDrawable(R.styleable.MyButton_imgOFF);
			imgON = a.getDrawable(R.styleable.MyButton_imgON);
		} catch (Exception e) {
			e.printStackTrace();
		}
		a.recycle();
	}

	public MyButton(Context context) {
		super(context);
	}

	@Override
	public void setChecked(boolean checked) {
		super.setChecked(checked);
		udpateDrawable();

	}

	private void udpateDrawable() {
		if (this.isChecked()) {
			Log.e(MyButton.class.getName(),"changing to imgON");
			this.setBackgroundDrawable(imgON);
		} else {
			Log.e(MyButton.class.getName(),"changing to imgOFF");
			this.setBackgroundDrawable(imgOFF);
		}
	}

	@Override
	protected void onFinishInflate() {
		udpateDrawable();
		super.onFinishInflate();
	}

}



2.编写attrs定义文件(res/values/attrs.xml)

<?xml version="1.0" encoding="utf-8"?>
<resources> 
    <declare-styleable name="MyButton">
        <attr name="imgON" format="reference" />
        <attr name="imgOFF" format="reference" />
    </declare-styleable> 
</resources>



3.涉及到的2个图片资源如下

res/drawable/off.png

res/drawable/on.png

4.测试用activity的layout文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.example.buttonsample"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.sample.button.MyButton
        android:id="@+id/testmy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/white"
        app:imgOFF="@drawable/off"
        app:imgON="@drawable/on" >
    </com.sample.button.MyButton>

</LinearLayout>


5.实际效果即:

点击按钮时,按钮会在以下2个图片之间切换.

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。