package com.wistron.StereoUI;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.BitmapFactory.Options;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup;
import android.widget.AbsoluteLayout;
/**
* Copyright (c) 2012 Wistron SWPC
* All rights reserved.
* @author WH1107028
* @date 2012-02-21 12:00:00
* @comment
* @purpose CSToggleButton
* @detail
*/
@SuppressWarnings("deprecation")
public class CSToggleButton extends CSView{
protected ToggleButton[] mToggleButtons = null;
private boolean m_dragged = false;
private boolean m_allow_dragged = false;
private int mSlipWidth =0,
mSlipHeight = 0;
private float mRotation = 0,mScaleX = 1f,mScaleY = 1f,mSclipX = 0;
private float mParameter = 0;
private boolean mDrawSlip = false;
public CSToggleButton(Context context) {
super(context);
m_context = context;
mToggleButtons = new ToggleButton[2];
for (int i = 0; i < mToggleButtons.length; i++) {
mToggleButtons[i] = new ToggleButton(context);
}
}
@Override
public void setVisibility(int visibility) {
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mToggleButtons[0].setVisibility(visibility);
mToggleButtons[1].setVisibility(visibility);
}
@Override
public void setEnable(boolean enabled) {
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mToggleButtons[0].setEnabled(enabled);
mToggleButtons[1].setEnabled(enabled);
}
public void setBackground(int resid){
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mToggleButtons[0].setBackground(resid);
mToggleButtons[1].setBackground(resid);
}
public void setOffImage(int resid){
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mToggleButtons[0].setOffImage(resid);
mToggleButtons[1].setOffImage(resid);
}
public void setOnImage(int resid){
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mToggleButtons[0].setOnImage(resid);
mToggleButtons[1].setOnImage(resid);
}
public void setRotation(float rotation){
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mRotation = rotation;
mToggleButtons[0].setRotation(rotation);
mToggleButtons[1].setRotation(rotation);
}
public void setSlipSize(int width,int height){
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mSlipWidth = width;
mSlipHeight = height;
mToggleButtons[0].setSlipSize(width, height);
mToggleButtons[1].setSlipSize(width, height);
}
/**
* 設置控件為3D模式
*/
@Override
public void setDimension(boolean is3d) {
super.setDimension(is3d);
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
if(mToggleButtons[0].getLayoutParams() != null && mToggleButtons[1].getLayoutParams() != null){
if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){
mToggleButtons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly));
mToggleButtons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry));
}else{
mToggleButtons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly));
mToggleButtons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry));
}
mToggleButtons[0].requestLayout();
mToggleButtons[1].requestLayout();
}
Log.e("CSToggleButton", "m_cur_width"+m_cur_width+"m_cur_height"+m_cur_height);
if (is3d) {
mToggleButtons[0].setButtonSize(m_cur_width, m_cur_height);
mToggleButtons[1].setButtonSize(m_cur_width, m_cur_height);
// mToggleButtons[0].mSlipOnWidth = mToggleButtons[0].mSlipOnWidth/2;
// mToggleButtons[1].mSlipOnWidth = mToggleButtons[0].mSlipOnWidth/2;
// mToggleButtons[0].setSlipSize(mToggleButtons[0].mSlipOnWidth/2, mToggleButtons[0].mSlipOnHeight);
// mToggleButtons[1].setSlipSize(mToggleButtons[1].mSlipOnWidth/2, mToggleButtons[1].mSlipOnHeight);
mDrawSlip = true;
mToggleButtons[1].mSlipBtnX = mToggleButtons[0].mSlipBtnX ;
mToggleButtons[0].setSlipScaleAndRotation(0.5f, 1f,-mRotation);
mToggleButtons[1].setSlipScaleAndRotation(0.5f, 1f,-mRotation);
// mToggleButtons[0].setButtonScale(0.5f, 1f);
// mToggleButtons[1].setButtonScale(0.5f, 1f);
}else {
mToggleButtons[0].setButtonSize(m_cur_width, m_cur_height);
mToggleButtons[1].setButtonSize(m_cur_width, m_cur_height);
mToggleButtons[0].setSlipScaleAndRotation(1f, 1f,0);
mToggleButtons[1].setSlipScaleAndRotation(1f, 1f,0);
// mToggleButtons[0].setSlipSize(mToggleButtons[0].mSlipOnWidth*2, mToggleButtons[0].mSlipOnHeight);
// mToggleButtons[1].setSlipSize(mToggleButtons[1].mSlipOnWidth*2, mToggleButtons[1].mSlipOnHeight);
// mToggleButtons[0].setButtonSize(mToggleButtons[0].mBgOnOriginal.getWidth(),mToggleButtons[0].mBgOnOriginal.getHeight());
// mToggleButtons[1].setButtonSize(mToggleButtons[1].mBgOnOriginal.getWidth(),mToggleButtons[1].mBgOnOriginal.getHeight());
// mToggleButtons[0].setSlipSize(mToggleButtons[0].mSlipButtonOriginal.getWidth(), mToggleButtons[0].mSlipButtonOriginal.getHeight());
// mToggleButtons[1].setSlipSize(mToggleButtons[1].mSlipButtonOriginal.getWidth(), mToggleButtons[1].mSlipButtonOriginal.getHeight());
}
}
@Override
public boolean touchEvent(MotionEvent event) {
boolean state = false;
boolean mAllowTouch = false;
Rect lRect = new Rect();
Rect rRect = new Rect();
int [] location0 = new int[2];
int [] location1 = new int[2];
float extendWidth = 0;
float extendHeight = 0;
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return state;
}
mToggleButtons[0].getGlobalVisibleRect(lRect);
mToggleButtons[1].getGlobalVisibleRect(rRect);
mToggleButtons[0].getLocationOnScreen(location0);
mToggleButtons[1].getLocationOnScreen(location1);
//若控件隐藏,则不响应点击事件
if(getVisibility()==View.INVISIBLE || getVisibility()==View.GONE){
return false;
}
if (mRotation == 0) {
mParameter = 1f;
}else {
mParameter = 0.3f;
extendWidth = mToggleButtons[0].getWidth() * mParameter;
extendHeight = mToggleButtons[0].getWidth() * (1 - mParameter);
}
if(
((float)location0[0] <= event.getRawX()/2 - (float)m_offset
&& location0[0] + mToggleButtons[0].getWidth() >= event.getRawX()/2 - m_offset
&& (float)location0[1] - extendHeight/2 <= event.getRawY()
&& location0[1] + mToggleButtons[0].getHeight() + extendHeight/2 >= event.getRawY())
||
((float)location1[0] <= event.getRawX()/2 +(float) m_offset
&& location1[0] + mToggleButtons[1].getWidth() >= event.getRawX()/2 + m_offset
&& (float)location1[1] - extendHeight/2 <= event.getRawY()
&& location1[1] + mToggleButtons[1].getHeight() + extendHeight/2 >= event.getRawY())
)
{
if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
mAllowTouch =true;
}
event.setLocation( event.getRawX() - m_cur_lx , event.getRawY() );
state |= mToggleButtons[0].onTouchEvent(event);
event.setLocation( event.getRawX() + m_cur_lx , event.getRawY() );
mDrawSlip = false;
event.setLocation(event.getRawX() + m_cur_rx - 2*m_cur_lx , event.getRawY() );
state |= mToggleButtons[1].onTouchEvent(event);
event.setLocation(event.getRawX() - m_cur_rx + 2*m_cur_lx , event.getRawY() );
}else{
if(event.getAction() == MotionEvent.ACTION_UP){
if(mToggleButtons[0].isPressed()){
mToggleButtons[0].setPressed(false);
mToggleButtons[1].setPressed(false);
state |= true;
}
}
}
return state;
}
// @Override
// public boolean touchEvent(MotionEvent event) {
// boolean state = false;
// boolean mAllowTouch = false;
// Rect lRect = new Rect();
// Rect rRect = new Rect();
// int [] location0 = new int[2];
// int [] location1 = new int[2];
//
// float extendWidth = 0;
// float extendHeight = 0;
//
// if(mToggleButtons[0] == null || mToggleButtons[1] == null){
// return state;
// }
//
// mToggleButtons[0].getGlobalVisibleRect(lRect);
// mToggleButtons[1].getGlobalVisibleRect(rRect);
// mToggleButtons[0].getLocationOnScreen(location0);
// mToggleButtons[1].getLocationOnScreen(location1);
//
// //若控件隐藏,则不响应点击事件
// if(getVisibility()==View.INVISIBLE || getVisibility()==View.GONE){
// return false;
// }
//
//
// if (mRotation == 0) {
// mParameter = 1f;
//
// }else {
// mParameter = 0.3f;
// extendWidth = mToggleButtons[0].getWidth() * mParameter;
// extendHeight = mToggleButtons[0].getWidth() * (1 - mParameter);
// }
//
// if(
// ((float)location0[0] <= event.getRawX()/2 - (float)m_offset
// && location0[0] + mToggleButtons[0].getWidth() >= event.getRawX()/2 - m_offset
// && (float)location0[1] - extendHeight/2 <= event.getRawY()
// && location0[1] + mToggleButtons[0].getHeight() + extendHeight/2 >= event.getRawY())
// ||
// ((float)location1[0] <= event.getRawX()/2 +(float) m_offset
// && location1[0] + mToggleButtons[1].getWidth() >= event.getRawX()/2 + m_offset
// && (float)location1[1] - extendHeight/2 <= event.getRawY()
// && location1[1] + mToggleButtons[1].getHeight() + extendHeight/2 >= event.getRawY())
//// event.getX()<= mToggleButtons[0].getWidth() && event.getY() < mToggleButtons[1].getHeight() + extendHeight
//
//
// )
// {
// if (event.getAction() == MotionEvent.ACTION_DOWN) {
// mAllowTouch = true;
// }
//
//// event.setLocation( event.getRawX() - m_cur_lx , event.getRawY() );
//// state |= mToggleButtons[0].onTouchEvent(event);
//// event.setLocation( event.getRawX() + m_cur_lx , event.getRawY() );
////
//// mDrawSlip = false;
//// event.setLocation(event.getRawX() + m_cur_rx - 2*m_cur_lx , event.getRawY() );
//// state |= mToggleButtons[1].onTouchEvent(event);
//// event.setLocation(event.getRawX() - m_cur_rx + 2*m_cur_lx , event.getRawY() );
//
// }
//
//
// if (event.getAction() == MotionEvent.ACTION_UP && mAllowTouch) {
//
// mAllowTouch = false;
// event.setLocation( event.getRawX() - m_cur_lx , event.getRawY() );
// state |= mToggleButtons[0].onTouchEvent(event);
// event.setLocation( event.getRawX() + m_cur_lx , event.getRawY() );
//
// mDrawSlip = false;
// event.setLocation(event.getRawX() + m_cur_rx - 2*m_cur_lx , event.getRawY() );
// state |= mToggleButtons[1].onTouchEvent(event);
// event.setLocation(event.getRawX() - m_cur_rx + 2*m_cur_lx , event.getRawY() );
// }
//
//
// if (mAllowTouch) {
// mAllowTouch = false;
// event.setLocation( event.getRawX() - m_cur_lx , event.getRawY() );
// state |= mToggleButtons[0].onTouchEvent(event);
// event.setLocation( event.getRawX() + m_cur_lx , event.getRawY() );
//
// mDrawSlip = false;
// event.setLocation(event.getRawX() + m_cur_rx - 2*m_cur_lx , event.getRawY() );
// state |= mToggleButtons[1].onTouchEvent(event);
// event.setLocation(event.getRawX() - m_cur_rx + 2*m_cur_lx , event.getRawY() );
// }
//// else{
//// if(event.getAction() == MotionEvent.ACTION_UP){
//// mToggleButtons[0].setPressed(false);
//// mToggleButtons[1].setPressed(false);
//// state |= true;
//// }
//
//
//// }
//
// return state;
//
// }
public void setOnCheckedChangeListener(OnChangedListener l){
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mToggleButtons[0].setOnChangedListener(l);
}
public void setOnClickListener(OnClickListener l){
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mToggleButtons[0].setOnClickListener(l);
mToggleButtons[1].setOnClickListener(l);
}
@Override
public void addToLayout(ViewGroup layout) {
// TODO Auto-generated method stub
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
if(m_is_3D){
if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){
mToggleButtons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly));
mToggleButtons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry));
}else{
mToggleButtons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly));
mToggleButtons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry));
}
}
layout.addView(mToggleButtons[0]);
layout.addView(mToggleButtons[1]);
}
/**
* 获取控件的可见性
* @return
*/
public int getVisibility(){
int visile = -1;
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
visile = -1;
}
visile = mToggleButtons[0].getVisibility();
return visile;
}
/**
* 設置控件的位置
*/
@Override
public void setLocation(int x, int y) {
super.setLocation(x, y);
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
if(mToggleButtons[0].getLayoutParams() != null && mToggleButtons[1].getLayoutParams() != null){
if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){
mToggleButtons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly));
mToggleButtons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry));
}else{
mToggleButtons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly));
mToggleButtons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry));
}
mToggleButtons[0].requestLayout();
mToggleButtons[1].requestLayout();
}
}
@Override
public void setSize(int width, int height) {
// TODO Auto-generated method stub
super.setSize(width, height);
m_cur_width = width;
m_cur_height = height;
if(mToggleButtons[0] == null || mToggleButtons[1] == null){
return;
}
mToggleButtons[0].setButtonSize(width, height);
mToggleButtons[1].setButtonSize(width, height);
}
/**
* 拨动按钮的普通版
* @author WH1107028
*
*/
public class ToggleButton extends View {
private boolean mNowChoose = false;//记录当前按钮是否打开,true为打开,flase为关闭
private boolean mOnSlip = false;//记录用户是否在滑动的变量
private float mDownX = 0,
mNowX = 0; //按下时的x,当前的x,
private Rect mBtnOn = null,
mBtnOff = null; //打开和关闭状态下,游标的Rect
private float mSlipBtnX = 0;
private boolean mIsChangeListenerOn = false;
private OnChangedListener mOnChangeListener;
private Bitmap mBgOn = null,
mBgOff = null,
mSlipOn = null,
mSlipOff = null,
mSlipButton = null,
mBgOnHalf = null,
mBgOffHalf= null,
mSlipButtonHalf = null,
mBgOnOriginal = null,
mBgOffOriginal = null,
mSlipOnOriginal = null,
mSlipOffOriginal = null,
mSlipButtonOriginal = null;
private int mIdBgOn = android.R.drawable.toast_frame,
mIdBgOff = android.R.drawable.toast_frame,
mIdBtnOn = android.R.drawable.button_onoff_indicator_on,
mIdBtnOff = android.R.drawable.button_onoff_indicator_off;
private int mBgOnWidth = 0,
mBgOnHeight = 0,
mSlipOnWidth = 0,
mSlipOnHeight = 0;
public ToggleButton(Context context) {
super(context);
init();
}
public ToggleButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ToggleButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init(){//初始化
//载入图片资源
Options opt = new Options();
opt.inJustDecodeBounds = false;
// mBgOn = BitmapFactory.decodeResource(getResources(), mIdBgOn, opt);
// mBgOff = BitmapFactory.decodeResource(getResources(), mIdBgOff, opt);
// mSlipOn = BitmapFactory.decodeResource(getResources(), mIdBtnOn, opt);
// mSlipOff = BitmapFactory.decodeResource(getResources(), mIdBtnOff, opt);
mBgOnOriginal = BitmapFactory.decodeResource(getResources(), mIdBgOn, opt);
mBgOffOriginal = BitmapFactory.decodeResource(getResources(), mIdBgOff, opt);
mSlipOnOriginal = BitmapFactory.decodeResource(getResources(), mIdBtnOn, opt);
mSlipOffOriginal = BitmapFactory.decodeResource(getResources(), mIdBtnOff, opt);
mBgOn = mBgOnOriginal;
mBgOff = mBgOffOriginal;
mSlipOn = mSlipOnOriginal;
mSlipOff = mSlipOffOriginal;
mSlipButton = mSlipOn;
//获得需要的Rect数据
mBtnOn = new Rect(0,0,mSlipButton.getWidth(),mSlipButton.getHeight());
mBtnOff = new Rect(
mBgOff.getWidth() - mSlipButton.getWidth(),
0,
mBgOff.getWidth(),
mSlipButton.getHeight());
this.setPivotX(mBtnOn.width()/2);
this.setPivotY(mBtnOn.height()/2);
mSlipOnWidth = mSlipOnOriginal.getWidth();
mSlipOnHeight = mSlipOnOriginal.getHeight();
//设置监听器
// setOnTouchListener(this);
}
public void setScaleThumbX(float scale, float degree){
}
public void setBackground(int resid){
mIdBgOff = mIdBgOn = resid;
// mBgOff = mBgOn = BitmapFactory.decodeResource(getResources(), resid);
mBgOffOriginal = mBgOnOriginal = BitmapFactory.decodeResource(getResources(), resid);
}
public void setOnImage(int resid){
mIdBtnOn = resid;
mSlipOnOriginal = BitmapFactory.decodeResource(getResources(), resid);
init();
}
public void setOffImage(int resid){
mIdBtnOff = resid;
mSlipOffOriginal = BitmapFactory.decodeResource(getResources(), resid);
init();
}
public void setPivot(float pivotX, float pivotY){
this.setPivotX(pivotX);
this.setPivotY(pivotY);
}
@Override
protected void onDraw(Canvas canvas) {//绘图函数
mBtnOn = new Rect(0,0,mSlipButton.getWidth(),mSlipButton.getHeight());
mBtnOff = new Rect(
mBgOff.getWidth() - mSlipButton.getWidth(),
0,
mBgOff.getWidth(),
mSlipButton.getHeight());
super.onDraw(canvas);
Matrix matrix = new Matrix();
Paint paint = new Paint();
float x = 0f;
paint.setAntiAlias(true);
{
//滑动到前半段与后半段的背景不同
if(mNowX < (mBgOn.getWidth()/2)){
canvas.drawBitmap(mBgOff, matrix, paint); //画出关闭时的背景
}
else{
canvas.drawBitmap(mBgOn, matrix, paint); //画出打开时的背景
}
//定位游标位置
if(mOnSlip){//正在滑动
if(mNowX >= mBgOn.getWidth() - mSlipButton.getWidth()/2){//是否划出指定范围
x = mBgOn.getWidth() - mSlipButton.getWidth();
Log.w("SlipButton_-2", "x = bg.w - sb.w = " + mBgOn.getWidth() + " - " + mSlipButton.getWidth() + " = " + x);
}
else{
x = mNowX - mSlipButton.getWidth()/2;
Log.w("SlipButton_-1", "x = now.x - sb.w/2 = " + mNowX + " - " + mSlipButton.getWidth()/2 + " = " + x);
}
}else{//未滑动
if(mNowChoose)//根据现在的开关状态设置画游标的位置
x = mBtnOff.left;
else
x = mBtnOn.left;
}
//对游标位置进行异常判断...
if(x < 0){
x = 0;
// Log.w("SlipButton_0", "x = bg.w - sb.w = " + mBgOn.getWidth() + " - " + mSlipButton.getWidth() + " = " + x);
}
else if(x > mBgOn.getWidth() - mSlipButton.getWidth()){
x = mBgOn.getWidth() - mSlipButton.getWidth();
Log.w("SlipButton_1", "x = bg.w - sb.w = " + mBgOn.getWidth() + " - " + mSlipButton.getWidth() + " = " + x);
}
// Log.w("SlipButton_2", "x = bg.w - sb.w = " + mBgOn.getWidth() + " - " + mSlipButton.getWidth() + " = " + x);
//更换游标图片
if(x < mBgOn.getWidth()/2 - mSlipButton.getWidth()/2){
mSlipButton = mSlipOn;
}else{
mSlipButton = mSlipOff;
}
// mSlipBtnX = x;
if (m_is_3D) {
matrix.postScale(mScaleX, mScaleY);
matrix.postRotate(-mRotation);
matrix.postTranslate(-4f, 0f);
mSlipButton = Bitmap.createBitmap(mSlipButton, 0, 0, mSlipButton.getWidth(), mSlipButton.getHeight(), matrix, true);
if (mDrawSlip) {
canvas.drawBitmap(mSlipButton, mSlipBtnX, 0, paint);//画出游标.
}else {
canvas.drawBitmap(mSlipButton, x, 0, paint);//画出游标.
}
}else {
canvas.drawBitmap(mSlipButton, x, 0, paint);//画出游标.
}
}
}
@Override
public boolean onTouchEvent( MotionEvent event) {
boolean state = false;
int [] location = new int[2];
getLocationOnScreen(location);
if (m_is_3D) {
event.setLocation(event.getX() - location[0], event.getY() - location[1]);
}
Log.e("event.getx()="+event.getX(), "mbnon.getwidth()/2="+mBgOn.getWidth()/2+"event.gety()="+event.getY()+"location[0]="+location[0]+"location[1]="+location[1]);
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
mNowX = event.getX();
state = true;
break;
case MotionEvent.ACTION_DOWN:
if(event.getX() > mBgOn.getWidth() || event.getY() >mBgOn.getHeight()){
return false;
}else {
mOnSlip = true;
mDownX = event.getX();
mNowX = mDownX;
state = true;
}
break;
case MotionEvent.ACTION_UP:
mOnSlip = false;
boolean LastChoose = mNowChoose;
if(event.getX() >= (mBgOn.getWidth() / 2)){
mNowChoose = true;
}
else{
mNowChoose = false;
}
Log.e("up", "mIsChangeListenerOn:"+mIsChangeListenerOn+"LastChoose:"+LastChoose+"mNowChoose"+mNowChoose);
if(mIsChangeListenerOn && (LastChoose != mNowChoose)){
mOnChangeListener.OnChanged(mNowChoose);
Log.e("", "mischanglistener");
}
state = true;
break;
default:
break;
}
invalidate();//重画控件
if (m_is_3D) {
event.setLocation(event.getX() + location[0], event.getY() + location[1]);
}
return state;
}
public void setOnChangedListener(OnChangedListener listener){//设置监听器,当状态修改的时候
mIsChangeListenerOn = true;
mOnChangeListener = listener;
}
public void setButtonSize(int width,int height){
mBgOnWidth = width;
mBgOnHeight = height;
mBgOn = zoomBitmap(mBgOnOriginal, width, height);
mBgOff = zoomBitmap(mBgOffOriginal, width, height);
invalidate();
}
public void setSlipSize(int width,int height){
mSlipOnWidth = width;
mSlipOnHeight = height;
mSlipOn = zoomBitmap(mSlipOnOriginal, width, height);
mSlipOff = zoomBitmap(mSlipOffOriginal, width, height);
invalidate();
}
public void setHalfScale(){
//保存压缩后的图片
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 1f);
mSlipButtonHalf = Bitmap.createBitmap(mSlipButton, 0, 0, mSlipButton.getWidth(), mSlipButton.getHeight(), matrix, true);
}
public void setSlipScaleAndRotation(float sx,float sy,float rotation){
mScaleX = sx;
mScaleY = sy;
invalidate();
}
public void setButtonScale(float sx,float sy){
Matrix matrix = new Matrix();
matrix.setScale(sx, sy);
mBgOn = Bitmap.createBitmap(mBgOn, 0, 0, mBgOn.getWidth(), mBgOn.getHeight(), matrix, true);
mBgOff = Bitmap.createBitmap(mBgOff, 0, 0, mBgOff.getWidth(), mBgOff.getHeight(), matrix, true);
invalidate();
}
public int getSlipWidth(){
if(mSlipOn != null && mSlipOff != null){
return mSlipOn.getWidth();
}else {
return -1;
}
}
public int getSlipHeight(){
if(mSlipOn != null && mSlipOff != null){
return mSlipOn.getHeight();
}else {
return -1;
}
}
//放大缩小图片
public Bitmap zoomBitmap(Bitmap bitmap,int w,int h){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidht = ((float)w / width);
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidht, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix,
true);
return newbmp;
}
}
//事件接口
public interface OnChangedListener {
abstract void OnChanged(boolean checkState);
}
@Override
public Object save() {
// TODO Auto-generated method stub
return null;
}
@Override
public void restore(Object object) {
// TODO Auto-generated method stub
}
}