2012-02-16 35 views
6

Hi SimpleOnGestureListener không hoạt động trong ứng dụng của tôi, đây là cách tôi đang triển khai nó. Có lẽ bạn có thể phát hiện những gì là sai. Vấn đề là gỡ lỗi cho thấy ứng dụng không bao giờ đi vào onFling (...) methode và gdt.onTouchEvent (sự kiện); luôn trả về false:/ Bất kỳ ý tưởng nào ?? Cảm ơnSimpleOnGestureListener không bao giờ đi vào phương thức onFling (...)

lớp hoạt động của tôi

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"); 
     } 
    }); 



} 


    } 

Listener trừu tượng của tôi

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(); 

} 

Trả lời

16

Thay thế sự kiện này:

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

nó nên làm việc

+0

nó hoạt động! cảm ơn –

Các vấn đề liên quan