自定义签名View以及绘制

自定义签名View以及绘制,第1张

主要思路就是在onTouchEvent处理move路径
落笔的地方就用mPath.moveTo(event.getX(),event.getY());
滑动就用mPath.quadTo(mPreX,mPreY,endX,endY); 
我这里认为在up的时候就是一笔花完了,drawUp方法是自己处理逻辑用的。

switch (event.getAction()){ 
case MotionEvent.ACTION_DOWN: 
        curDate = new Date(System.currentTimeMillis());                  mPath.moveTo(event.getX(),event.getY()); mPreX = event.getX(); mPreY =         event.getY(); lists.add(new xyBean(mPreX,mPreY,true));         Log.e("111",mPreX+":"+mPreY); return true; case 

MotionEvent.ACTION_MOVE: 
        float endX = (mPreX+event.getX())/2; 
        float endY = (mPreY+event.getY())/2;         
        Log.e("111",endX+":"+endY); 
        mPath.quadTo(mPreX,mPreY,endX,endY); 
        mPreX = event.getX(); 
mPreY = event.getY(); 
lists.add(new xyBean(mPreX,mPreY,false)); 
invalidate(); 
break; 
case MotionEvent.ACTION_UP: 
endDate = new Date(System.currentTimeMillis()); 
long time = endDate.getTime()-curDate.getTime(); drawUp.drawUp(lists.size(),getContractSignMessage(),time);
 lists.clear(); 
break; }


public class MyDrawView extends View {
    private Path mPath = new Path();
    Paint paint = new Paint();
    private float mPreX,mPreY;
    private List lists = new ArrayList<>();
    private drawUp drawUp;
    private Date curDate,endDate;
    public MyDrawView(Context context,drawUp drawUp) {
        super(context);
        this.drawUp = drawUp;
    }

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

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(15);
        canvas.drawPath(mPath,paint);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int hedight = MeasureSpec.getSize(heightMeasureSpec);
        Log.e("11111111",width+":"+hedight);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                curDate = new Date(System.currentTimeMillis());
                mPath.moveTo(event.getX(),event.getY());
                mPreX = event.getX();
                mPreY = event.getY();
                lists.add(new xyBean(mPreX,mPreY,true));
                Log.e("111",mPreX+":"+mPreY);
                return true;
            case MotionEvent.ACTION_MOVE:
                float endX = (mPreX+event.getX())/2;
                float endY = (mPreY+event.getY())/2;
                Log.e("111",endX+":"+endY);
                mPath.quadTo(mPreX,mPreY,endX,endY);
                mPreX = event.getX();
                mPreY = event.getY();
                lists.add(new xyBean(mPreX,mPreY,false));
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                endDate = new Date(System.currentTimeMillis());
                long time = endDate.getTime()-curDate.getTime();
                drawUp.drawUp(lists.size(),getContractSignMessage(),time);
                lists.clear();

                break;
        }
        return super.onTouchEvent(event);
    }
       //清空方法
    public void reset(){
        if(countDownTimer!=null){
            countDownTimer.cancel();
            countDownTimer = null;
        }
        lists.clear();
        mPath.reset();
        postInvalidate();
    }
    private CountDownTimer countDownTimer;
    int i = 0;
    float startX,startY,endX,endY;
//查看绘制效果
    public void drawName(){
        try {
            if(countDownTimer!=null){
                countDownTimer.cancel();
                countDownTimer = null;
            }
            int numI = lists.size();
            countDownTimer = new CountDownTimer(numI*50,50) {
                @Override
                public void onTick(long millisUntilFinished) {
                    xyBean xyBean = lists.get(i);
                    boolean down = xyBean.isDown();
                    if(down){
                        float x = xyBean.getX();
                        float y = xyBean.getY();
                        mPath.moveTo(x,y);
                        startX = x;
                        startY = y;
                    }else {
                        float x = xyBean.getX();
                        float y = xyBean.getY();
                        endX = (startX+x)/2;
                        endY = (startY+y)/2;
                        mPath.quadTo(startX,startY,endX,endY);
                        startX = x;
                        startY = y;
                    }
                    invalidate();
                    if(i getLists(){
        return lists;
    }

    private class xyBean{
        private float x;
        private float y;
        private boolean down;

        public xyBean(float x, float y,boolean down) {
            this.x = x;
            this.y = y;
            this.down = down;
        }

        public float getX() {
            return x;
        }

        public void setX(float x) {
            this.x = x;
        }

        public float getY() {
            return y;
        }

        public void setY(float y) {
            this.y = y;
        }

        public boolean isDown() {
            return down;
        }

        public void setDown(boolean down) {
            this.down = down;
        }
    }

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/919797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存