状态开关这一功能目前市场上的应用运用的比较广泛,而且也很高大上的感觉.Android 4.0以后也提供了switch控件,同样的状态开关效果,但虽然功能适用,审美就是差点.这是广大工程师的毛病,尤其Google工程师,功能强大,界面简单.哈哈..............
这是简单的状态按钮,先看一下效果图.
先讲一下实现原理,自定义控件,顾名思义,我们就要继承View.覆盖onDrow方法,在其中通过Canvas绘制一红一灰两个图片,和一个圆形的按钮图片.同时覆盖onTouchEvent方法,实现滑动效果,同时通过线程实现动画效果.
转载注明出处:http://blog.csdn.net/gaoshouxiaodi/article/details/25953473点击打开链接
package com.example.modeswitch;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
/**
* 组件分为三种状态:打开、关闭、正在滑动<br/>
* 使用方法:
* ModeSwitch switch = new ModeSwitch(this);
* switch.setOnSwitchChangedListener.onSwitchChangedListener);
* linearLayout.addView(slideSwitch);
注:也可以加载在xml里面使用
*/
public class ModeSwitch extends View
{
public static final String TAG = "ModeSwitch ";
public static final int SWITCH_OFF = 0;//关闭状态
public static final int SWITCH_ON = 1;//打开状态
public static final int SWITCH_SCROLING = 2;//滚动状态
//用于显示的文本
private String mOnText = "打开";
private String mOffText = "关闭";
private int mSwitchStatus = SWITCH_OFF;
private boolean mHasScrolled = false;//表示是否发生过滚动
private int mSrcX = 0, mDstX = 0;
private int mBmpWidth = 0;
private int mBmpHeight = 0;
private int mThumbWidth = 0;
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private OnSwitchChangedListener mOnSwitchChangedListener = null;
//开关状态图
Bitmap mSwitch_off, mSwitch_on, mSwitch_thumb;
public ModeSwitch (Context context)
{
this(context, null);
}
public ModeSwitch (Co