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上的开关按钮
热度:54 发布时间:2016-04-25 06:36:42.0
相关解决方案
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- android 大量数据按周分组,该如何解决
- android RadioButton如何设置默认选中
- iphone 模拟器,该如何处理
- ksoap2-android-这个包,连接webService怎么设置超时
- android 怎么重新设置锚点
- android UI界面设计解决方案
- android 图片对象获取的有关问题
- android 怎么调用淘宝支付宝接口
- Android 沿袭InputMethodService自定义输入法
- android 关于服务连接的疑义
- android 两个activity如何通信
- android 怎么实现对view的放大和缩小
- android 教程解决方法
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java)中的java.net能不能和c#的system.net.sockets进行tcp通信,该如何解决
- android ListView 中的onItemClick Intent 没法跳转
- android(java) 中文乱码的有关问题
- c#c++,android,ios(iphone),php,java视屏课程 散分
- 有哪位高手用过JPlayer ,进来一下,IPHONE 等设备播放有关问题
- android Post文件到ASP.NET的有关问题,能收到参数收不到文件
- RIM 替 Android 开发者提供免费的 PlayBook!2月13日前
- android 动态设立控件高度