android 开发 View _14 自定义View的滑动

效果图:

代码:

package com.example.lenovo.mydemo.SlideUnlockView;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.support.v4.app.NotificationCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

/**
 * Created by lenovo on 2018/7/13.
 */

public class SlideUnlockView extends View {
    private final static String TAG = "SlideUnlockView";
    //文字参数组
    private String mText = "test";//文字
    private int mTextColor = 0xFFFFFFFF;//文字颜色
    private int mTextSize = 50;//文字大小
    //矩形背景参数组
    private int mBgColor = 0xFF31FF83; //矩形背景颜色
    private int mRectRound = 100; //矩形圆角
    //圆形图标参数组
    private int mCircleBgColor = 0xFF000000; //圆形背景颜色
    private int mIconColor = 0xFFFFFFFF;
    private int mAlpha = 50;
    //滑动坐标组
    private int Offset;
    private int mMove;
    private int mLastX;

    public SlideUnlockView(Context context) {
        super(context);
    }

    public SlideUnlockView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public SlideUnlockView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    private  void  setCanvas(Canvas canvas){
        canvas.translate(getWidth()/2,getHeight()/2);

    }
    public void setmText(String text){
        if(text !="" && text == null){
            this.mText = text;
            Log.e(TAG, "setmText:"+mText);
        }else{
            this.mText = "test";
            Log.e(TAG, "Error:setmText null!");
        }
    }

    public void setmTextSize(int size){
        if(size > 0 ){
            this.mTextSize = size;
            Log.e(TAG, "setmTextSize:"+mTextSize);
        }else {
            this.mTextSize =  50;
            Log.e(TAG, "Error:setmTextSize null!");
        }
    }

    public void setmBgColor(int color){
        if (color > 0){
            this.mBgColor = color;
            Log.e(TAG, "setmBgColor:"+mBgColor);
        }else {
            this.mBgColor = 0xFF31FF83;
            Log.e(TAG, "Error:setmBgColor null!");

        }

    }


    //画底图圆角矩形
    private void  drawRoundRect(Canvas canvas){
        Paint paint = new Paint();
        Path path = new Path();
        paint.setColor(mBgColor);
        paint.setStrokeWidth(10);
        paint.setStyle(Paint.Style.FILL);
        RectF rect = new RectF(0,0,getWidth(),getHeight());
        path.addRoundRect(rect,mRectRound,mRectRound, Path.Direction.CW);
        canvas.drawPath(path,paint);
    }
    //在圆角矩形上画文字
    private void drawText(Canvas canvas){
        Paint paint = new Paint();
        paint.setColor(mTextColor);
        paint.setTextSize(mTextSize);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawText(mText,0-mTextSize,0+mTextSize/2,paint);
    }
    //画带透明的圆形,里面带方向键" 〉"
    private void drawCircular(Canvas canvas){
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(mCircleBgColor);
        paint.setAlpha(mAlpha);
        Path path = new Path();
        path.setFillType(Path.FillType.EVEN_ODD);
        path.addCircle(getHeight()/2-mMove,getHeight()/2,getHeight()/2, Path.Direction.CW);
        canvas.drawPath(path,paint);
        path.reset();
        paint.reset();
        //画 > 图标
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(10);
        paint.setStrokeCap(Paint.Cap.ROUND);
        paint.setColor(mIconColor);
        path.setFillType(Path.FillType.EVEN_ODD);
        path.moveTo((getHeight()/2-10)-mMove,(float)(getHeight()*0.3));
        path.lineTo((getHeight()/2+10)-mMove,getHeight()/2);
        path.lineTo((getHeight()/2-10)-mMove,(float)(getHeight()*0.7));
        canvas.drawPath(path,paint);
        paint.reset();
        path.reset();

    }


    //接口回调处理,回调图标位置


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        int positionX = (int) event.getX();
        Log.e(TAG, "onTouchEvent:positionX:"+positionX);
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    if (positionX < getHeight()){
                        mLastX = positionX;
                        Log.e(TAG, "onTouchEvent:mLastX:" + mLastX);
                        mMove = 0;
                    }else {
                        Log.e(TAG, "超出了点击范围");
                        Log.e(TAG, "onTouchEvent:action:"+action);
                    }
                    break;
                case MotionEvent.ACTION_MOVE:
                    if(positionX<getHeight()||mLastX - positionX < 5) {
                        mMove = mLastX - positionX;
                        Log.e(TAG, "onTouchEvent:mMove:" + mLastX);
                        postInvalidate();
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    break;
                case MotionEvent.ACTION_CANCEL:
                    mMove = 0;
                    postInvalidate();
                    break;
                default:
                    break;
            }

        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //setCanvas(canvas);//设置画布
        drawRoundRect(canvas);//画矩形
        drawText(canvas);//画文字
        drawCircular(canvas);//画圆形
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37217804/article/details/81347775
今日推荐