public class SlipButton extends View {
private boolean nowChoose = false;//记录当前按钮是否打开,true为打开,flase为关闭
private boolean onSlip = false;//记录用户是否在滑动的变量
private float nowX;//按下时的x,当前的x
private float downX;
private float baseX;
private OnChangedListener ChgLsn;
private Bitmap slip_btn;
private float centerX;
private float yes_text_width;
private float no_text_width;
private int btnWdith;
private String[] messages;
private Paint paint;
public SlipButton(Context context) {
super(context);
init();
}
public SlipButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.BLACK);
paint.setTextSize(14);
setMessages(new String[]{"Yes", "No"});
}
public void setButtonBitmap(Bitmap bitmap) {
if (bitmap == null) {
return;
}
slip_btn = bitmap;
btnWdith = slip_btn.getWidth() / 3;
centerX = btnWdith / 2;
}
public void setTextColor(int color) {
paint.setColor(color);
}
public void setTextSize(int size) {
paint.setTextSize(size);
}
public void setMessages(String[] messages) {
this.messages = messages;
yes_text_width = paint.measureText(messages[0]);
no_text_width = paint.measureText(messages[1]);
}
public void setStatusOn(boolean on) {
nowChoose = on;
}
public boolean getStatusOn() {
return nowChoose;
}
public void setOnChangedListener(OnChangedListener l) {
ChgLsn = l;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (slip_btn == null) {
return;
}
float minX = centerX;
float maxX = getMeasuredWidth() - centerX;
if (onSlip) {
nowX = baseX - (downX - nowX);
nowX = Math.min(Math.max(minX, nowX), maxX);
} else {
if (nowChoose) {
nowX = maxX;
} else {
nowX = minX;
}
baseX = nowX;
}
canvas.drawBitmap(slip_btn, nowX - centerX - btnWdith, 0, paint);//画出游标.
int marginX1 = (int)(btnWdith - yes_text_width) / 2;
canvas.drawText(messages[0], nowX - centerX - marginX1 - yes_text_width, 22, paint);
int marginX2 = (int)(btnWdith - no_text_width) / 2;
canvas.drawText(messages[1], nowX + centerX + marginX2, 22, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (slip_btn == null) {
return false;
}
switch(event.getAction())//根据动作来执行代码
{
case MotionEvent.ACTION_MOVE://滑动
nowX = event.getX();
float moveX = downX - nowX;
if (Math.abs(moveX) > 5) {
onSlip = true;
}
break;
case MotionEvent.ACTION_DOWN://按下
downX = event.getX();
break;
case MotionEvent.ACTION_UP://松开
boolean LastChoose = nowChoose;
if (onSlip) {
moveX = downX - event.getX();
if (nowChoose) {
if ((moveX > 0) && (moveX >= centerX))
nowChoose = !nowChoose;
} else {
if ((moveX < 0) && (Math.abs(moveX) >= centerX))
nowChoose = !nowChoose;
}
} else {
nowChoose = !nowChoose;
}
onSlip = false;
if ((ChgLsn != null) && (LastChoose != nowChoose)) {
if (nowChoose) {
ChgLsn.onChanged(nowChoose, messages[0]);
} else {
ChgLsn.onChanged(nowChoose, messages[1]);
}
}
break;
default:
break;
}
invalidate();//重画控件
return true;
}
public interface OnChangedListener {
public void onChanged(boolean on, String value);
}
}
分享到:
相关推荐
android开发仿iphone开关按钮
Android中仿iphone开关按钮SwitchButton的基本使用,详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/60480014
Android自定义Iphone风格的圆角边框开关按钮,用xml实现,无图片资源
自定义滑动开关按钮,可左右滑动切换开关状态,也可点击切换。与iPhone的开关组件效果一样。
有时候我们在Android开发的时候需要iphone中的设置按钮,这个时候只能重写checkbox来自定义了,详细请看:http://blog.csdn.net/dawanganban/article/details/19081773
具有一定开发经验的android开发人员和iphone/ipad开发人员在学完本书后,也可以通过一次编码,构建出可跨平台运行的app。 《jquery mobile快速入门》 第1章 jquery mobile简介 1 1.1 通用访问 1 1.2 跨所有...
苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上。iOS与苹果的Mac OS X操作系统一样,它也是以Darwin为基础的,因此...
EasyGo是一个像iPhone的AssistiveTouch的按钮, 它漂浮在你的手机屏幕(在任何APP之上), 你可以将它移动到任何地方. 功能 ★ 快速设置(如:打开Wifi,调节屏幕亮度,手机网路开关等). ★ 打开你常用的应用. ★ 回到主...
|iPhone|ios|Android|Opera|CE|UC|QQ|Phone|Mobile|Mozilla"/> 5.增加防串号后捣乱功能,网站默认设置增加:[31]发贴回贴发短信等是否需要密码验证 一些重要操作也增加每次需要录入密码验证功能。 6.增加过滤...