自定义view实现开关按钮并监听(有滑动效果)
2016-05-18 20:45
627 查看
自定义view实现开关按钮并监听(有滑动效果)
原理:其实是首先得有两张图片,一张是背景图,左开右关,第二张其实说白了就是挡住某一边的图,所以这张图的宽度就只有第一张的一半,这样就可以让用户辨别按钮是开还是关。然后监听view的点击事件,从而调用invalidate()方法来重绘来产生滑动效果。难点:得从点击事件获取滑动的坐标然后调整第二张图片离左边的距离。
@Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub maxLeft = toggleBackground.getWidth() - toggleSolide.getWidth(); canvas.drawBitmap(toggleBackground, 0, 0, paint); switch (state) { case STATE_DOWN: case STATE_MOVE: if (currentX > toggleSolide.getWidth() / 2f) { // 让滑块向右移动(重新绘制滑块的位置) left = currentX - toggleSolide.getWidth() / 2f; if (left > maxLeft) left = maxLeft; canvas.drawBitmap(toggleSolide, left, 0, paint); } else if (currentX <= toggleSolide.getWidth() / 2f) { // 让滑块不动就可以 canvas.drawBitmap(toggleSolide, 0, 0, paint); } break; case STATE_NONE: if (toggleBackground != null) { canvas.drawBitmap(toggleBackground, 0, 0, paint); } if (toggleSolide != null) { canvas.drawBitmap(toggleSolide, 0, 0, paint); } break; case STATE_UP: if (isOpen) { canvas.drawBitmap(toggleSolide, maxLeft, 0, paint); } else { canvas.drawBitmap(toggleSolide, 0, 0, paint); } if(onUpActionListenter!=null){ onUpActionListenter.OnUp(isOpen); } break; default: canvas.drawBitmap(toggleSolide, 0, 0, paint); break; } }
开关的监听:通过自定义接口来实现对开关的监听,并在点击事件调用接口方法
private OnUpActionListenter onUpActionListenter;
public interface OnUpActionListenter{ public void OnUp(boolean isOpen); } public void setOnUpActionListenter(OnUpActionListenter listenter){ this.onUpActionListenter = listenter; }
相关文章推荐
- java中path和CLASSPATH的配置和意义解析
- Real-Time Rendering 翻译 2.渲染管线
- hdu 4831(线段树---待解决)
- 三角形类
- C++课堂作业_02_PAT1025.反转链表
- UIButton中UIImage的使用
- java中的接口
- Windows中断那些事儿
- 数据结构c++语言描述——最大堆(MaxHeap)
- C++课堂作业_02_PAT1025.反转链表
- 深圳电子,真能长盛不衰吗?
- 数据包重放
- 六、ThreadLocal类及其应用
- HDU 1712 ACboy needs your help 分组背包
- Clojure里调用Java类
- 1087 - Diablo
- Swift带振动效果的UITextField
- Hello World
- java类和方法
- C++第5 次上机作业