2011-11-25 3 views
2


나는 캘린더가 있으며 왼쪽/오른쪽으로 스 와이프하고 개월을 전환 할 수있게하려고합니다.
왼쪽/오른쪽으로 스 와이프 할 청취자가 있습니까?
감사합니다.왼쪽/오른쪽으로 스 와이프 이벤트

+0

은이 질문은 여기에 구체적으로 대답한다 : 는 http://stackoverflow.com/questions/937313/android-basic-gesture-detection –

답변

4

할 수 있습니다 사용자 아래의 예와 같이 SimpleOnGestureListener :

:

public class SelectFilterActivity extends Activity implements OnClickListener 
{ 

private static final int SWIPE_MIN_DISTANCE = 120; 
private static final int SWIPE_MAX_OFF_PATH = 250; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
private GestureDetector gestureDetector; 
View.OnTouchListener gestureListener; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    /* ... */ 

    // Gesture detection 
    gestureDetector = new GestureDetector(new MyGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    }; 

} 

class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show(); 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show(); 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 

} 

그런 다음 당신이보기에 첨부 (분명, 이전/다음 달 이동 실제 코드로 토스트를 대체)

// Do this for each view added to the grid 
view.setOnClickListener(SelectFilterActivity.this); 
view.setOnTouchListener(gestureListener); 
+0

이 작동하지 않습니다. 'gridview.setOnClickListener (SelectFilterActivity.this)' 오류 : '타입 SelectFilterActivity의 어떠한 둘러싸는 인스턴스 범위에 액세스 할 수 없습니다 '와 다른 오류 'gridview.setOnTouchListener (gestureListener하는)'는 오류 : 는'gestureListener 될 수 없습니다 변수로 해석 됨 ' –

+0

특정 상황에 맞게 수정해야하며, 전체 솔루션을 코딩하는 데 필요한 세부 정보를 제공하지 않았습니다. 중요한 부분은 MyGestureDetector 클래스입니다. 어떤 식 으로든보기에 연결해야합니다. – Guillaume

0

SimpleOngestureListener는 onFling을 catch 할 수 있습니다. 이것을 무시하면 스 와이프를 포착 할 수 있습니다.

class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       //do your stuff 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       //do your stuff 
      } 
     } catch (Exception e) 
     { 
      // nothing 

     } 
     return false; 
    } 
+0

같은 스레드의 다른 답변 코드를 복사하지 않습니다 ... –

+0

우리는 ...? 하지만 감사합니다. 나는 잠시 동안이 코드를 사용 해왔다. 은 다른 사람들도 그렇게 할 수있다. – ron