开关

来源:互联网 发布:淘宝打印助手在哪里 编辑:程序博客网 时间:2024/04/25 23:56
package com.example111.sxy.a04;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by sxy on 2017/10/21. * 一个视图从创建到显示过程中的主要方法 * 1 构造方法实例化类 * 2测量measureint,int)-->onMeasure(); * 如果当前View是一个viewGroud,还有义务测量孩子 * 如果孩子有建议权 * 3指定控件的位置layout()-->onlayout(); * 指定控件的位置,一般View不用写这个方法,viewGroup的时候才需要 * 4绘制视图 draw()---onDrow(canvas) * 根据上面两个方法参数,进入绘制 */public class MyToggleButton extends View  implements View.OnClickListener{    private Bitmap backgroundBitmap;    private Bitmap slidingBitmap;    private int slidLeftMax;    private int slidLeft = 0;    private Paint paint;    private boolean isopen = false;    public MyToggleButton(Context context, @Nullable 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);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        setMeasuredDimension(backgroundBitmap.getWidth(),backgroundBitmap.getHeight());    }    @Override    protected void onDraw(Canvas canvas) {//        super.onDraw(canvas);        canvas.drawBitmap(backgroundBitmap,0,0,paint);        canvas.drawBitmap(slidingBitmap,slidLeft,0,paint);    }    private boolean isEnableClick = true;    @Override    public void onClick(View view) {        if(isEnableClick) {            isopen = !isopen;        }        if(isopen) {            slidLeft = slidLeftMax;        }else {            slidLeft = 0;        }        invalidate();    }    public void flash(){                if(isopen) {            slidLeft = slidLeftMax;        }else {            slidLeft = 0;        }        invalidate();    }    private float startx;    private float Lastx;    @Override    public boolean onTouchEvent(MotionEvent event) {        super.onTouchEvent(event);        switch (event.getAction()){            case MotionEvent.ACTION_DOWN:                Lastx = startx = event.getRawX();                isEnableClick = true;                break;            case MotionEvent.ACTION_MOVE:                float endx = event.getRawX();                float distancex = endx-startx;                slidLeft = (int) (slidLeft+distancex);                if(slidLeft<0) {                    slidLeft = 0;                }else if(slidLeft>slidLeftMax) {                    slidLeft = slidLeftMax;                }                invalidate();                startx = event.getRawX();                if(Math.abs(endx-Lastx) > 5) {                    isEnableClick = false;                }                break;            case MotionEvent.ACTION_UP:                if(!isEnableClick) {                    if(slidLeft>slidLeftMax/2) {                        isopen = true;                    }else {                        isopen = false;                    }                    flash();                }                break;        }        return true;    }}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context="com.example111.sxy.a04.MainActivity"    android:paddingBottom="16dp"    android:paddingLeft="16dp"    android:paddingRight="16dp"    android:paddingTop="16dp">    <com.example111.sxy.a04.MyToggleButton        android:layout_height="wrap_content"        android:layout_width="wrap_content"        android:layout_centerInParent="true"/></RelativeLayout>