Android 3分钟学会 手把手教你滑动解锁实现

参考博客

https://www.cnblogs.com/lihuabest/archive/2013/03/08/2950070.html

 

 

原理:

 1.背景---通过xml里面布局

2.绘制静态图片  (知道上下左右)

 canvas.drawBitmap(dragBitmap, drawX < 0 ? 5 : drawX,drawY,null);
 
/** * 绘制拖动时的图片 */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); invalidateDragImg(canvas); }
 

 

3.判断手是否点击到了滑动区域(通过一个矩形的面积范围内)
 
private boolean isActionDown(MotionEvent event) {  Rect rect = new Rect(); heartView.getHitRect(rect); boolean isIn = rect.contains((int)event.getX()-heartView.getWidth(), (int)event.getY()); if(isIn){ heartView.setVisibility(View.GONE); return true; } return false; } 

4.处理移动事件和事件传递(移动的时候不断的重回图,通过坐标的变化)

 
/** * 对拖拽图片不同的点击事件处理 */ @Override public boolean onTouchEvent(MotionEvent event) { int X = (int) event.getX(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: locationX = (int) event.getX(); Log.i(TAG, "是否点击到位=" + isActionDown(event)); return isActionDown(event);//判断是否点击了滑动区域 case MotionEvent.ACTION_MOVE: //保存x轴方向,绘制图画 locationX = X; invalidate(); //重新绘图 return true; case MotionEvent.ACTION_UP: //判断是否解锁成功 if(!isLocked()){ //没有解锁成功,动画应该回退 handleActionUpEvent(event); //动画回退  } return true; } return super.onTouchEvent(event); } 

5.在时间范围内回退动画(通过handler控制时间,不停的发延时消息,条件是x的距离到了最左边)

 
/** * 回退动画 * @param event */ private void handleActionUpEvent(MotionEvent event) { int x = (int) event.getX(); int toLeft = leftRingView.getWidth(); locationX = x - toLeft; if(locationX >= 0){  handler.postDelayed(ImageBack, BACK_DURATION); //回退  } } 
 
 /**
     * 未解锁时,图片回退
     */
    private Runnable ImageBack = new Runnable() {
        @Override
        public void run() {
            locationX = locationX - (int) (VE_HORIZONTAL*BACK_DURATION);
            if(locationX >= 0){
                handler.postDelayed(ImageBack, BACK_DURATION); //回退
                invalidate();
            }
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值