android 手势滑动(上下左右=拖动)

实现:

    float vY=10;
    float wX=0;
    float hY=0;
    boolean isDrawFirst=true;
    private void drawRect(Canvas canvas){
        if(isDrawFirst){
            wX=svWidth/2;
            hY=svHeight / 2;
            isDrawFirst=false;
        }
        if(!(rectY>svHeight)){

            Paint paint=new Paint();
            paint.setColor(Color.RED);  //设置画笔颜色
            paint.setStyle(Paint.Style.FILL);//填充样式改为描边
            paint.setStrokeWidth(5);//设置画笔宽度

            Path path = new Path();

            if(wX<0){
                wX=0;
            }else if(wX>svWidth-10){
                wX=svWidth-10;
            }

            if(hY<0){
                hY=0;
            }else if(hY>svHeight){
                hY=svHeight;
            }


            path.moveTo(wX, hY);
            path.lineTo(wX + 10, hY);
            path.lineTo(wX + 10, hY + vY);
            path.lineTo(wX, hY + vY);
            path.close();
            vY += 10;



            canvas.drawPath(path,paint);
}
 int downX=0;
    int downY=0;
    int firstMoveX=0;
    int firstMoveY=0;
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                downX= (int) event.getRawX();
                downY= (int) event.getRawY();
                firstMoveX=downX;
                firstMoveY=downY;
                LogTools.i(TAG, "onTouchEvent: downX="+downX+",downY="+downY);
                break;
            case MotionEvent.ACTION_MOVE:
                int moveX= (int) event.getRawX();
                int moveY= (int) event.getRawY();
                int absX=Math.abs(moveX-firstMoveX);
                int absY=Math.abs(moveY-firstMoveY);

                //加速度
                if(absX>=50){
                    absX= (int) (absX*1.9);
                }else if(absX>=45){
                    absX= (int) (absX*1.8);
                }else if(absX>=40){
                    absX= (int) (absX*1.7);
                }else if(absX>=35){
                    absX= (int) (absX*1.6);
                }else if(absX>=30){
                    absX= (int) (absX*1.5);
                }else if(absX>=25){
                    absX=(int) (absX * 1.4);
                }else if(absX>=20){
                    absX=(int) (absX * 1.3);
                }else if(absX>=15){
                    absX=(int) (absX * 1.2);
                }else if(absX>=10){
                    absX=(int) (absX * 1.1);
                }

                //左右滑动监听
                if(moveX>downX){
                    if(moveX>firstMoveX){
                            LogTools.i(TAG,"(moveX>downX)往右滑===");
                            wX+=absX;
                    }else if(moveX<firstMoveX){
                            wX-=absX;
                            LogTools.i(TAG,"(moveX>downX)往左滑===");
                    }

                }else if(moveX<downX){
                    if(moveX<firstMoveX){
                            LogTools.i(TAG,"(moveX<downX)往左滑===");
                            wX-=absX;
                    }else if(moveX>firstMoveX){
                            wX+=absX;
                            LogTools.i(TAG,"(moveX<downX)往右滑===");
                    }
                }

                //上下滑动监听
                if(moveY>downY){
                    if(moveY>firstMoveY){
                            LogTools.i(TAG,"(moveY>downY)往下滑===");
                            hY+=absY;
                    }else if(moveY<firstMoveY){
                            hY-=absY;
                            LogTools.i(TAG,"(moveY>downY)往上滑===");
                    }

                }else if(moveY<downY){

                    if(moveY<firstMoveY){
                            LogTools.i(TAG,"(moveY<downY)往上滑===");
                            hY-=absY;
                    }else if(moveY>firstMoveY){
                            hY+=absY;
                            LogTools.i(TAG,"(moveY<downY)往下滑===");
                    }
                }
                LogTools.i(TAG, "moveX="+moveX+",firstMoveX="+firstMoveX+",downX="+downX+",adsX="+absX+",wX="+wX);
                LogTools.i(TAG, "moveY="+moveY+",firstMoveY="+firstMoveY+",downY="+downY+",adsY="+absY+",hY="+hY);
                firstMoveX=moveX;
                firstMoveY=moveY;
                break;
            case MotionEvent.ACTION_UP:
                int upX= (int) event.getRawX();
                int upY= (int) event.getRawY();
                LogTools.i(TAG, "onTouchEvent: upX="+upX+",upY="+upY);
                break;
        }
        return true;
    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值