效果图:
代码:
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);//画圆形
}
}