나는 캘린더가 있으며 왼쪽/오른쪽으로 스 와이프하고 개월을 전환 할 수있게하려고합니다.
왼쪽/오른쪽으로 스 와이프 할 청취자가 있습니까?
감사합니다.왼쪽/오른쪽으로 스 와이프 이벤트
답변
할 수 있습니다 사용자 아래의 예와 같이 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);
이 작동하지 않습니다. 'gridview.setOnClickListener (SelectFilterActivity.this)' 오류 : '타입 SelectFilterActivity의 어떠한 둘러싸는 인스턴스 범위에 액세스 할 수 없습니다 '와 다른 오류 'gridview.setOnTouchListener (gestureListener하는)'는 오류 : 는'gestureListener 될 수 없습니다 변수로 해석 됨 ' –
특정 상황에 맞게 수정해야하며, 전체 솔루션을 코딩하는 데 필요한 세부 정보를 제공하지 않았습니다. 중요한 부분은 MyGestureDetector 클래스입니다. 어떤 식 으로든보기에 연결해야합니다. – Guillaume
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;
}
같은 스레드의 다른 답변 코드를 복사하지 않습니다 ... –
우리는 ...? 하지만 감사합니다. 나는 잠시 동안이 코드를 사용 해왔다. 은 다른 사람들도 그렇게 할 수있다. – ron
은이 질문은 여기에 구체적으로 대답한다 : 는 http://stackoverflow.com/questions/937313/android-basic-gesture-detection –