android自定义滑动开关
来源:互联网 发布:决战武林进阶数据地煞8 编辑:程序博客网 时间:2024/05/04 15:38
自定义View一般分以下步骤:
测量:onMeasure 设置控件显示在屏幕上的宽高
布局:onLayout 设置控件显示在屏幕上的位置(只有在自定义ViewGroup中才用到)
绘制:onDraw 控制显示在屏幕上的样子
而View和ViewGroup的区别
1.他们都需要进行测量操作
2.ViewGroup主要是控制子view如何摆放,所以必须实现onLayout
View没有子view,所以不需要onLayout方法,但是必须实现onDraw
而自定义滑动开关这里继承View,效果图:
public class ToggleButton extends View {
private Bitmap slideBg;private Bitmap swithcBg;private ToggleState toggleState = ToggleState.OPEN;private int currentX = 0;private boolean isSliding = false;//自定义View在xml布局文件使用时才调用此构造方法public ToggleButton(Context context, AttributeSet attrs) { super(context, attrs);}//view在java代码中动态生成,调用此构造方法public ToggleButton(Context context) { super(context);}/** * 设置滑动块图片 * * @param slideBackgroudResourec */public void setSlideBackgroudResourec(int slideBackgroudResourec) { slideBg = BitmapFactory.decodeResource(getResources(), slideBackgroudResourec);}/** * 设置滑动背景图 * * @param switchBackgroudResourec */public void setSwitchBackgroudResourec(int switchBackgroudResourec) { swithcBg = BitmapFactory.decodeResource(getResources(), switchBackgroudResourec);}@Overridepublic boolean onTouchEvent(MotionEvent event) { currentX = (int) event.getX(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: isSliding = true; break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: isSliding = false; //如果滑动点大于背景图一半,此时状态为开 int centerX = swithcBg.getWidth()/2; if (currentX > centerX){ if (toggleState != ToggleState.OPEN){ toggleState = ToggleState.OPEN; if (listner != null){ listner.onToggleStateChange(toggleState); } } }else{ if (toggleState != ToggleState.CLOSE){ toggleState = ToggleState.CLOSE; if (listner != null){ listner.onToggleStateChange(toggleState); } } } break; } //刷新控件让系统调用onDraw方法 invalidate(); return true;}//设置当前控件显示在屏幕的宽高@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(swithcBg.getWidth(), swithcBg.getHeight());}//设置当前控件显示在屏幕的样子@Overrideprotected void onDraw(Canvas canvas) { super.onDraw(canvas); /** * 1.绘制的背景图 * 2.left:屏幕的左边X座标 * 3.top:屏幕顶端的y座标 * 4.画笔工具,需要显示颜色和画笔大小才用 */ canvas.drawBitmap(swithcBg, 0, 0, null); if (isSliding){ int left = currentX - slideBg.getWidth() / 2; if (left <= 0) left = 0; if (left > swithcBg.getWidth() - slideBg.getWidth()){ left = swithcBg.getWidth() - slideBg.getWidth(); } canvas.drawBitmap(slideBg, left, 0, null); }else{ if (toggleState == ToggleState.OPEN) { canvas.drawBitmap(slideBg, swithcBg.getWidth() - slideBg.getWidth(), 0, null); } else { canvas.drawBitmap(slideBg, 0, 0, null); } }}public void setToggleState(ToggleState toggleState) { this.toggleState = toggleState;}public enum ToggleState { OPEN, CLOSE}private onToggleStateChangeListner listner;public void setOnToggleStateChangeListner(onToggleStateChangeListner listner){ this.listner = listner;}public interface onToggleStateChangeListner{ void onToggleStateChange(ToggleState state);}
}
0 0
- android自定义滑动开关
- Android自定义控件---滑动开关
- Android 自定义滑动开关ToggleButton
- android自定义滑动选择开关
- Android 自定义SwitchView(滑动开关)
- android自定义滑动开关控件,自定义view
- Android:android自定义滑动开关控件
- android自定义控件滑动开关详解
- android自定义View之滑动开关SlideButton
- Android自定义控件—滑动开关
- Android自定义控件(二) 滑动开关
- android 纯粹自定义控件 滑动开关
- android自定义滑动开关组件【转】
- Android自定义控件之滑动开关
- Android自定义开关(可滑动,点击)
- Android进阶自定义控件之滑动开关
- Android自定义view 滑动开关 支持左右滑动 适用于listview
- 自定义滑动开关
- 升级硬件喽 24GB内存
- 学习笔记之JavaSE(20)--面向对象编程11
- ActiveMQ安装优化
- 深入编译链接
- yii2框架中使用sphinx使用搜索引擎 多条件选择搜索
- android自定义滑动开关
- JS学习42:使用spm@3构建seajs项目
- poj 1088 滑雪 动态规划
- php概率计算
- day01-Linux安装及配置
- Java枚举(Enum)
- JS学习43:如何用spm@3构建一个多入口、模块化编程项目
- MySQL的表分区详解
- C语言--Linux下的文件IO和标准IO