实现:
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;
}