2011-07-06 26 views
5

Cập nhật: Tôi đã tìm ra những gì đang xảy ra. Xem ý kiến.ScaleGestureDetector.OnScaleGestureListener.onScaleEnd() phương pháp không được nhấn

Tôi đang cố gắng viết một ViewSwitcher chuyển tất cả cử chỉ cho đứa con đầu tiên cho đến khi nó nhận được cử chỉ quy mô; sau đó chuyển chúng cho đứa con thứ hai cho đến khi đứa trẻ đó được thu nhỏ lại hoàn toàn, khi nó trở lại đứa con đầu tiên. lớp con của tôi có một ScaleGestureDetector và tôi đã nghe rất đơn giản:

protected class OnScaleModeSwitcher implements ScaleGestureDetector.OnScaleGestureListener 
    { 
     protected PageFlipSwitcher owner; 

     public OnScaleModeSwitcher(PageFlipSwitcher newOwner) 
     { 
      super(); 
      owner = newOwner; 
     } 

     @Override 
     public boolean onScale(ScaleGestureDetector detector) { 
      return false; 
     } 

     @Override 
     public boolean onScaleBegin(ScaleGestureDetector detector) { 
      owner.onScaleBegin(); 
//returning false here causes the rest of the gesture to be ignored. 
      return false; 
     } 

     @Override 
     public void onScaleEnd(ScaleGestureDetector detector) { 
      owner.onScaleEnd(); 
     } 
    } 

Như bạn có thể xem tất cả nó làm là lấy một tham chiếu đến đối tượng chủ sở hữu trên xây dựng, sau đó vượt qua một số sự kiện với các phương pháp trong lớp chủ sở hữu. Tuy nhiên, onScaleEnd() không được mã lệnh truy cập.

Tôi biết rằng onInterceptTouchEvent có thể hơi dicey một chút; Tôi làm theo các gợi ý trong tài liệu Android cho nó càng sát càng tốt và có

@Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) 
    { 
     onTouchEvent(ev); 
     return false; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) 
    { 
//mode is the name of the ScaleGestureDetector 
     mode.onTouchEvent(ev); 

//this code just passes events to the children 
//it seems to work OK 
     if(zoomActive) 
     { 
      //ZoomSwitcher 
      getChildAt(1).onTouchEvent(ev); 
     } 
     else 
     { 
      //Gallery 
      getChildAt(0).onTouchEvent(ev); 
     } 
     return true; 
    } 

Tôi đọc ở đâu khác mà một GestureDetector thể không nhận được sự kiện ACTION_UP:

Android: How to detect when a scroll has ended

Là những gì là xảy ra ở đây? Nếu vậy thì điểm của phương thức onScaleEnd() là gì?

EDIT:

Tôi đã làm việc này: đó là do phương pháp của tôi trả về false. Eclipse tự động triển khai một số phần khai báo và tôi không thay đổi các giá trị trả về khi tôi điền chúng vào.

Trả lời

7

Nếu một ScaleGestureDetector được thiết lập trả về false từ onScaleBegin (...), sẽ không có phương pháp tiếp theo nào bị tấn công . Nói chung các phương thức tiêu thụ một MotionEvent nhưng trả về false không nhận được MotionEvents tiếp theo cho đến sau ACTION_UP, khi người nghe được đặt lại.

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