2013-02-27 2 views
1

아래 코드로 나를 도울 수 있습니까? 이 코드를 사용하여 화면에서 손가락을 스 와이프합니다.화면 스 와이프 감지 코드와 관련된 문제

import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 

public class ActivitySwipeDetector implements View.OnTouchListener { 

private Activity activity; 
static final int MIN_DISTANCE = 100; 
private float downX, downY, upX, upY; 

public ActivitySwipeDetector(final Activity activity) { 
    this.activity = activity; 
} 

public void onRightToLeftSwipe() { 
} 

public void onLeftToRightSwipe(){ 
} 

public void onTopToBottomSwipe(){ 
} 

public void onBottomToTopSwipe(){ 
} 

public boolean onTouch(View v, MotionEvent event) { 
switch(event.getAction()){ 
case MotionEvent.ACTION_DOWN: { 
Log.i("msg", "in MotionEvent.ACTION_DOWN "+event.getX()); 
downX = event.getX(); 
downY = event.getY(); 
} 
case MotionEvent.ACTION_UP: { 
Log.i("msg", "in MotionEvent.ACTION_UP "+event.getX()); 
upX = event.getX(); 
upY = event.getY(); 

float deltaX = downX - upX; 
float deltaY = downY - upY; 

// swipe horizontal? 
    if(Math.abs(deltaX) > MIN_DISTANCE){ 
    // left or right 
    if(deltaX < 0) { this.onLeftToRightSwipe(); return true; } 
    if(deltaX > 0) { this.onRightToLeftSwipe(); return true; } 
} else { Log.i("msg", "X-axis Swipe was only " + downX+"-"+upX + " long, need at least " +  
    MIN_DISTANCE); } 

// swipe vertical? 
if(Math.abs(deltaY) > MIN_DISTANCE){ 
    // top or down 
    if(deltaY < 0) { this.onTopToBottomSwipe(); return true; } 
    if(deltaY > 0) { this.onBottomToTopSwipe(); return true; } 
} else { Log.i("msg", "Y-axis Swipe was only " + downY+"-"+upY + " long, need at least " + 
MIN_DISTANCE); } 

//  return true; 
} 
} 
return false; 
} 

} 

나는이 코드를 테스트 할 때 UPX 광고 downX 변수가 같은 값을 반환하는 모두 내가 (직접 전화하지 에뮬레이터에서) 내 코드

myTextView.setOnTouchListener(new ActivitySwipeDetector(this) { 
     public void onRightToLeftSwipe() { 
      //do some stuff; 
     } 
     public void onLeftToRightSwipe() { 
      //do some stuff; 
     } 
     public void onTopToBottomSwipe() { 
      //do some stuff; 
     } 
     public void onBottomToTopSwipe() { 
      //do some stuff; 
     } 
    }); 

을이 클래스를 사용하고 어떻게입니다 . upY 및 downY 값도 마찬가지입니다. 그리고 그러므로 onLeftToRightSwipe() 메소드는 처음에는 호출되지 않습니다.

답변

0

줄을 추가하면 "true를 반환합니다." MotionEvent.ACTION_DOWN이 문제를 해결 한 경우

0

switch 문에서 각 경우 끝에 break;을 입력해야합니다.

switch(event.getAction()){ 

    case MotionEvent.ACTION_DOWN: { 
     Log.i("msg", "in MotionEvent.ACTION_DOWN "+event.getX()); 
     downX = event.getX(); 
     downY = event.getY(); 
     break; 
     } 
    case... 
+0

하지만 터치 한 후 MotionEvent.ACTION_DOWN을 종료합니다. 따라서 실행은 사례 MotionEvent.ACTION_UP으로 이동하지 않습니다. upX에서 시작 위치를 포착하고 upX에서 닫는 위치를 캡처해야합니다. 휴식 시간을 가짐으로써 다운 X는 폴 루핑 (polupate)된다. – user1938357

관련 문제