//实现效果
//Main
package com.bw.viewbutton;
import android.os.Bundle;
import android.app.Activity;
public class MainActivity extends Activity {
private MyButton bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (MyButton) findViewById(R.id.button);
bt.setBackgroundDrawableResource(R.drawable.switch_background);
bt.setForegroundDrawableResource(R.drawable.slide_button_background);
bt.setCheckdsate(true);
}
}
//自定义view
package com.bw.viewbutton;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class MyButton extends View {
private boolean state = false;
private Bitmap backResource;
private Bitmap foreResource;
private int eventx;
private boolean isstate;
public MyButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyButton(Context context) {
super(context);
}
public void setBackgroundDrawableResource(int switchBackground) {
backResource = BitmapFactory.decodeResource(getResources(),
switchBackground);
}
public void setForegroundDrawableResource(int slideButtonBackground) {
foreResource = BitmapFactory.decodeResource(getResources(),
slideButtonBackground);
}
public void setCheckdsate(boolean b) {
this.state = b;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(backResource.getWidth(), backResource.getHeight());
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(backResource, 0, 0, null);
if (isstate) {
int left = eventx - foreResource.getWidth() / 2;
if (left < 0) {
left = 0;
} else if (left > backResource.getWidth() - foreResource.getWidth()) {
left = backResource.getWidth() - foreResource.getWidth();
}
canvas.drawBitmap(foreResource, left, 0, null);
} else {
if (state) {
canvas.drawBitmap(foreResource, backResource.getWidth() - foreResource.getWidth(), 0, null);
} else {
canvas.drawBitmap(foreResource, 0, 0, null);
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isstate = true;
eventx = (int) event.getX();
break;
case MotionEvent.ACTION_MOVE:
eventx = (int) event.getX();
break;
case MotionEvent.ACTION_UP:
isstate = false;
eventx = (int) event.getX();
state = eventx > backResource.getWidth()/2;
break;
default:
break;
}
invalidate();
return true;
}
}