2012-02-16 2 views
6

안녕하세요 SimpleOnGestureListener가 내 응용 프로그램에서 작동하지 않습니다. 어떻게 구현하나요? 어쩌면 무엇이 잘못되었는지 확인할 수 있습니다. 것은 응용 프로그램이 onFling (...) methode 및 gdt.onTouchEvent (event)로 절대 들어 가지 않는다는 것을 보여주는 디버깅입니다. 항상 false를 반환합니다./ 모든 아이디어 ?? 감사합니다SimpleOnGestureListener가 onFling (...) 메서드로 절대 들어 가지 않음

내 활동 클래스

public class SimpleActivity extends Activity{ 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.simpleLayout); 

    final ImageView imageView = (ImageView) findViewById(R.id.gggbbb); 
    imageView.setOnTouchListener(new OnFlingGestureListener() { 

     @Override 
     public void onTopToBottom() { 
      System.out.println("top"); 
     } 

     @Override 
     public void onRightToLeft() { 
      System.out.println("right"); 
     } 

     @Override 
     public void onLeftToRight() { 
      System.out.println("left"); 
     } 

     @Override 
     public void onBottomToTop() { 
      System.out.println("bottom"); 
     } 
    }); 



} 


    } 

내 추상적 인 리스너

package com.dmd.client.detailsMenus; 

import android.view.GestureDetector; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public abstract class OnFlingGestureListener implements OnTouchListener { 

    private final GestureDetector gdt = new GestureDetector(new GestureListener()); 

    @Override 
    public boolean onTouch(final View v, final MotionEvent event) { 
    return gdt.onTouchEvent(event); 
    } 

    private final class GestureListener extends SimpleOnGestureListener { 

    private static final int SWIPE_MIN_DISTANCE = 60; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 100; 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      onRightToLeft(); 
      return true; 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      onLeftToRight(); 
      return true; 
      } 
      if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      onBottomToTop(); 
      return true; 
      } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      onTopToBottom(); 
      return true; 
      } 
      return false; 
    } 
    } 

    public abstract void onRightToLeft(); 

    public abstract void onLeftToRight(); 

    public abstract void onBottomToTop(); 

    public abstract void onTopToBottom(); 

} 

답변

16

이 이벤트를 교체 :

@Override 
public boolean onTouch(final View v, final MotionEvent event) { 
    gdt.onTouchEvent(event); 
    return true; 
} 

그것이 작동

+0

작동합니다! 감사 –