以下是以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);
	}

文章標籤
創作者介紹

Mazs's Notes

cookiesp 發表在 痞客邦 PIXNET 留言(0) 人氣()