BloggerAds

2012年11月14日 星期三

Android - 判斷手勢滑動方向(用onTouchEvent實現)

以下是以onTouchEvent實現判斷手勢滑動的方向


//裡面的upX upY downX downY 是float全域變數

public boolean onTouchEvent(MotionEvent event) {

float X = event.getX(); // 觸控的 X 軸位置
float Y = event.getY(); // 觸控的 Y 軸位置

switch (event.getAction()) { // 判斷觸控的動作

case MotionEvent.ACTION_DOWN: // 按下
downX = event.getX();
downY = event.getY();

return true;
case MotionEvent.ACTION_MOVE: // 拖曳

return true;
case MotionEvent.ACTION_UP: // 放開
Log.d("onTouchEvent-ACTION_UP","UP");
upX = event.getX();
upY = event.getY();
float x=Math.abs(upX-downX);
float y=Math.abs(upY-downY);
double z=Math.sqrt(x*x+y*y);
int jiaodu=Math.round((float)(Math.asin(y/z)/Math.PI*180));//角度

if (upY < downY && jiaodu>45) {//上
Log.d("onTouchEvent-ACTION_UP","角度:"+jiaodu+", 動作:上");
}else if(upY > downY && jiaodu>45) {//下
Log.d("onTouchEvent-ACTION_UP","角度:"+jiaodu+", 動作:下");
}else if(upX < downX && jiaodu< =45) {//左
Log.d("onTouchEvent-ACTION_UP","角度:"+jiaodu+", 動作:左");
// 原方向不是向右時,方向轉右
if (mDirection != EAST) {
mNextDirection = WEST;
}
}else if(upX > downX && jiaodu< =45) {//右
Log.d("onTouchEvent-ACTION_UP","角度:"+jiaodu+", 動作:右");
// 原方向不是向左時,方向轉右
if (mDirection ! = WEST) {
mNextDirection = EAST;
}
}
return true;
}

return super.onTouchEvent(event);
}