自定义开关按钮
来源:互联网 发布:齐家编织淘宝店 编辑:程序博客网 时间:2024/04/30 10:12
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;/** * 一个视图从创建到显示过程中的主要方法 * //1.构造方法实例化类 * //2.测量-measure(int,int)-->onMeasure(); * 如果当前View是一个ViewGroup,还有义务测量孩子 * 孩子有建议权 * //3.指定位置-layout()-->onLayout(); * 指定控件的位置,一般View不用写这个方法,ViewGroup的时候才需要,一般View不需要重写该方法 * //4.绘制视图--draw()-->onDraw(canvas) * 根据上面两个方法参数,进入绘制 */public class MyToggleButton extends View implements View.OnClickListener { private Bitmap backgroundBitmap; private Bitmap slidingBitmap; /** * 距离左边最大距离 */ private int slidLeftMax; private Paint paint; private int slideLeft; private float startX; private float lastX; private boolean isOpen = false; /** * 如果我们在布局文件使用该类,将会用这个构造方法实例该类,如果没有就崩溃 * @param context * @param attrs */ public MyToggleButton(Context context, AttributeSet attrs) { super(context, attrs); initView(); } private void initView() { paint = new Paint(); paint.setAntiAlias(true);//设置抗锯齿 backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.switch_background); slidingBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.slide_button); slidLeftMax = backgroundBitmap.getWidth() - slidingBitmap.getWidth(); setOnClickListener(this); } /** * 视图的测量 * @param widthMeasureSpec * @param heightMeasureSpec */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); } /** * 绘制 * @param canvas */ @Override protected void onDraw(Canvas canvas) {// super.onDraw(canvas); canvas.drawBitmap(backgroundBitmap,0,0,paint); canvas.drawBitmap(slidingBitmap, slideLeft, 0, paint); } /** * true:点击事件生效,滑动事件不生效 * false:点击事件不生效,滑动事件生效 */ private boolean isEnableClick = true; @Override public void onClick(View v) { if(isEnableClick){ isOpen = !isOpen; flushView(); } } private void flushView() { if(isOpen){ slideLeft = slidLeftMax; }else{ slideLeft = 0; } invalidate();//会导致onDraw()执行 } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event);//执行父类的方法 switch (event.getAction()){ case MotionEvent.ACTION_DOWN: //1.记录按下的坐标 lastX = startX = event.getX(); isEnableClick = true; break; case MotionEvent.ACTION_MOVE: //2.计算结束值 float endX = event.getX(); //3.计算偏移量 float distanceX = endX - startX;// slideLeft = (int) (slideLeft + distanceX); slideLeft += distanceX; if(slideLeft <0){ slideLeft = 0; }else if(slideLeft>slidLeftMax){ slideLeft = slidLeftMax; } //4.屏蔽非法值 //5.刷新 invalidate(); //6.数据还原 startX = event.getX(); if(Math.abs(endX - lastX) > 5){ //滑动 isEnableClick = false; } break; case MotionEvent.ACTION_UP: if(!isEnableClick){ if(slideLeft > slidLeftMax/2){ //显示按钮开 isOpen = true; }else{ isOpen = false; } flushView(); } break; } return true; }}
阅读全文
0 0
- Android自定义开关按钮
- 自定义开关按钮
- android 自定义开关按钮
- 自定义开关按钮
- 自定义view_开关按钮
- 自定义开关按钮
- Android自定义开关按钮
- 自定义 Switch 开关按钮
- 自定义开关按钮
- 自定义开关按钮SwitchButton
- 自定义View开关按钮
- android 自定义开关按钮
- 自定义类似开关按钮
- 自定义开关按钮
- 自定义开关,仿苹果的开关按钮
- android自定义开关、图片按钮
- Android 中的自定义开关按钮
- 自定义滑动开关按钮-SwitchButton
- eclipse安装svn
- CDN+边缘计算,到底靠不靠谱?
- 两种方法上传本地文件到github
- 蓝桥杯 算法训练 黑色星期五
- intellij idea 12 编码不可映射字符
- 自定义开关按钮
- 阿里云证书Dvs配置(Nginx)
- GitHub上三维空间中射线与三角形相交检测代码(Ray-Triangle)
- 用jquery获取select标签中选中的option值及文本
- Linux调度任务(crontab)基本使用
- Kettle 连接hive2
- Python 练习实例12
- 增强学习(一)——简介
- javaweb分页问题