我想在我的Android应用中实现两个手指轻扫手势。我使用了以下代码:
void handleTouch(MotionEvent m){
//Number of touches
int pointerCount = m.getPointerCount();
if(pointerCount == 2){
int action = m.getActionMasked();
int actionIndex = m.getActionIndex();
String actionString;
TextView tv = (TextView) findViewById(R.id.testDiffText);
switch (action)
{
case MotionEvent.ACTION_DOWN:
GLOBAL_TOUCH_POSITION_X = (int) m.getX(1);
actionString = "DOWN"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X;
tv.setText(actionString);
break;
case MotionEvent.ACTION_UP:
GLOBAL_TOUCH_CURRENT_POSITION_X = 0;
actionString = "UP"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X;
tv.setText(actionString);
break;
case MotionEvent.ACTION_MOVE:
GLOBAL_TOUCH_CURRENT_POSITION_X = (int) m.getX(1);
int diff = GLOBAL_TOUCH_POSITION_X-GLOBAL_TOUCH_CURRENT_POSITION_X;
actionString = "Diff "+diff+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X;
tv.setText(actionString);
break;
case MotionEvent.ACTION_POINTER_DOWN:
GLOBAL_TOUCH_POSITION_X = (int) m.getX(1);
actionString = "DOWN"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X;
tv.setText(actionString);
break;
default:
actionString = "";
}
pointerCount = 0;
}
else {
GLOBAL_TOUCH_POSITION_X = 0;
GLOBAL_TOUCH_CURRENT_POSITION_X = 0;
}
}
我在向上或向下滑动中执行相同的操作。它只执行Action_up任务。任何人都可以帮我实现从底部滑动到底部向上滑动。
答案 0 :(得分:5)
private static final int NONE = 0;
private static final int SWIPE = 1;
private int mode = NONE;
private float startY;
private float stopY;
// We will only detect a swipe if the difference is at least 100 pixels
// Change this value to your needs
private static final int TRESHOLD = 100;
public boolean onTouch(View v, MotionEvent event)
{
switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_POINTER_DOWN:
// This happens when you touch the screen with two fingers
mode = SWIPE;
// You can also use event.getY(1) or the average of the two
startY = event.getY(0);
break;
case MotionEvent.ACTION_POINTER_UP:
// This happens when you release the second finger
mode = NONE;
if(Math.abs(startY - stopY) > TRESHOLD)
{
if(startY > stopY)
{
// Swipe up
}
else
{
//Swipe down
}
}
this.mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if(mode == SWIPE)
{
stopY = event.getY(0);
}
break;
}
return true;
}
我希望这会有所帮助。