2012-08-29 4 views
5

Tôi muốn vô hiệu hóa cử chỉ fling của một scrollview và nó không có vẻ là làm việc .. Tôi nghĩ rằng nó sẽ dễ dàng như việc tạo ra một lớp cơ bản mở rộng scrollview và @Overriding các onFling phương pháp. nhưng nhật thực là đem lại cho tôi một lỗi để loại bỏ các @ Override:làm thế nào để vô hiệu hóa fling của scrollView

bất kỳ ý tưởng làm thế nào để vô hiệu hóa các fling

public class ScrollViewNoFling extends ScrollView { 

    /** 
    * @param context 
    * @param attrs 
    * @param defStyle 
    */ 
    public ScrollViewNoFling(Context context) { 

     super(context); 
     // TODO Auto-generated constructor stub 
    } 
    public ScrollViewNoFling(Context context, AttributeSet attrs) { 

     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 
    public ScrollViewNoFling(Context context, AttributeSet attrs, int defStyle) { 

     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
    { 
     return false; 
    } 

} 

Trả lời

12

Tôi đã giải quyết cùng một sự cố với phương pháp Vượt qua ghi đè. Nếu bạn ghi đè lên phương thức fling trên lớp ScrollViewNoFling của bạn và không gọi super.fling trên phương thức này, bạn sẽ có scrollView không được xử lý.

@Override 
public void fling (int velocityY) 
{ 
    /*Scroll view is no longer gonna handle scroll velocity. 
    * super.fling(velocityY); 
    */ 
} 
0

Tôi nghĩ rằng nó phải quăng ra và không onFling. Vui lòng tham khảo chính thức documentation

+1

Cũng lưu ý rằng 'onFling()' là một phần của [GestureDetector.OnGestureListener] (http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html). Nó là một phương pháp hợp lệ, không phải trong trường hợp này. –

0

Ngoài việc sử dụng fling() thay vì onFling(), bạn cần chú ý đến giá trị trả lại của mình.

Theo tài liệu cho onFling():

Returns

đúng nếu sự kiện này được tiêu thụ, nếu không sai

Nếu bạn muốn bắt sự kiện và không làm gì cả, trả về true. Nếu không, sự kiện sẽ được chuyển sang một số phương thức/lớp khác để cố gắng xử lý nó.