내 자신의 GestureDetector 클래스를 사용하여 왼쪽/오른쪽 onFling 이벤트를 감지하고 있습니다. 내가 본 모든 것이 제 코드에서 잘 보이지만 아무 일도 일어나지 않습니다 ...?내 SimpleOnGestureListener가 작동하지 않는 이유는 무엇입니까?
열려있는 내 토글 버튼 이외에 추가 된 기능이 필요합니다. 내 조각에서 탐색보기를 닫습니다.
public static AnimationLayout mLayout;
// these constants are used for onFling
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;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLayout = (AnimationLayout) findViewById(R.id.animation_layout);
gestureDetector = new GestureDetector(this.getApplicationContext(), new MyGestureDetector());
// Set the touch listener for the main view to be our custom gesture
// listener
mLayout.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
});
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
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(getApplicationContext(), "right_left", Toast.LENGTH_LONG).show();
Log.i("MyGestureDetector", "R2L!");
mLayout.closeSidebar();
// left to right swipe
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(getApplicationContext(), "left_right", Toast.LENGTH_LONG).show();
Log.i("MyGestureDetector", "L2R!");
mLayout.openSidebar();
}
return false;
}
// Return true from onDown for the onFling event to register
@Override
public boolean onDown(MotionEvent e) {
return true;
}
}
:
public void toggleSidebar()
{
if (mContent.getAnimation() != null)
{
return;
}
if (mOpened)
{
/* opened, make close animation */
mAnimation = new TranslateAnimation(0, -mSidebarWidth, 0, 0);
mAnimation.setAnimationListener(mCloseListener);
} else
{
/* not opened, make open animation */
mAnimation = new TranslateAnimation(0, mSidebarWidth, 0, 0);
mAnimation.setAnimationListener(mOpenListener);
}
mAnimation.setDuration(DURATION);
mAnimation.setFillAfter(true);
mAnimation.setFillEnabled(true);
mContent.startAnimation(mAnimation);
}
및
내 주요 활동 onFling (내public void openSidebar()
{
if (!mOpened)
{
toggleSidebar();
}
}
public void closeSidebar()
{
if (mOpened)
{
toggleSidebar();
}
}
가) 토글 부에 전화 ... 다음과 같이 토글 내 AnimationLayout 클래스의 메서드에 호출
이 버튼은 정상적으로 작동합니다.
...
case R.id.navToggleBtn : {
mLayout.toggleSidebar();
}
...
'TouchListener'가 전달할 모든 이벤트를 수신하고 있는지 확인할 수 있습니까? 레이아웃에 터치 가능한 어린이가 포함되어있는 경우 부모 (레이아웃)에서 이벤트를 훔칠 수 있습니다. – Devunwired
당신이 맞을 것 같아요. 함수를 자식 레이아웃에 배치하고 보겠습니다. – CelticParser