2011-11-15 39 views
14

Tôi đang sử dụng gói tương thích Android phiên bản 4 để hiển thị các trang pdf trong ứng dụng của mình. Tôi đã sử dụng PagerAdapter & ViewPager để hiển thị các trang pdf như chế độ xem cuộn ngang.Vô hiệu hóa & bật phân trang trong ViewPager trong Android

Bây giờ vấn đề là trong nội dung liên quan đến phân trang. Tôi có thể ngừng phân trang bằng cách phát hiện trẻ em bên trong chế độ xem theo chủ đề này android: ViewPager and HorizontalScrollVIew, nhưng làm cách nào tôi có thể bật lại khi người dùng chạm vào bên ngoài chế độ xem đó. Tôi đã sử dụng mã sau cho CustomViewPager.

public class CustomViewPager extends ViewPager { 

     private boolean enabled; 
     private int childId; 

     public CustomViewPager(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      this.enabled = true; 
     } 

     public void setChildId(int childId) { 
      this.childId = childId; 
     } 

     @Override 
     public boolean onInterceptTouchEvent(MotionEvent event) { 
      boolean result = false; 
      View scroll = getChildAt(childId); 
      if (scroll != null) { 
       Rect rect = new Rect(); 
       CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE); 
       scroll.getHitRect(rect); 
       if (rect.contains((int) event.getX(), (int) event.getY())) { 
        setPagingEnabled(false); 
        result = true; 
       } 
      } 
      return result; 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      if (this.enabled) { 
       return super.onTouchEvent(event); 
      } 
      return false; 
     } 

     public void setPagingEnabled(boolean enabled) { 
      this.enabled = enabled; 
     } 
    } 

Khi cố gắng chạm vào bên ngoài trang pdf thì cũng if(scroll!=null) trở thành sự thật theo cả hai hướng.

Bất kỳ ai cũng có thể giúp tôi cách bật lại để phân trang sẽ tiếp tục trong ViewPager.

+1

Bạn đã tryed này: http://stackoverflow.com/a/2655740/969325 – Warpzit

Trả lời

3

Tôi đã gặp sự cố tương tự với tệp hình ảnh phân trang cần chụm để thu phóng. Chỉ cần đặt một cách để tắt phân trang khi hình ảnh được phóng to và kích hoạt khi toàn bộ hình ảnh được hiển thị. Tôi giải quyết nó như thế này và nghĩ rằng bạn có thể làm một điều tương tự. Đầu tiên mở rộng: lớp MyViewPager kéo dài ViewPager {...} Và sau đó ở chỗ lớp ghi đè sau hai phương pháp

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (YOUR_CRITERIA_TOENABLE_DISABLE) { 
     return true; 

    } else { 
     return super.onTouchEvent(event); 
    } 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    return super.onInterceptTouchEvent(event); 
} 

Hãy chắc chắn để sử dụng xem pager của bạn trong bố trí xml hoặc tạo động từ mã.

0

Bạn đang đặt thành false nhưng không có trường hợp nào để đặt lại thành true. Ngoài ra, logic đánh chặn cảm ứng của bạn có vẻ hơi kỳ lạ ... lần duy nhất bạn cho phép máy nhắn tin chặn (và do đó xử lý trong onTouchEvent()) là khi bạn đặt phân trang được bật thành sai. Làm thế nào về sau đây?

@Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     boolean result = true; 
     View scroll = getChildAt(childId); 
     if (scroll != null) { 
      Rect rect = new Rect(); 
      CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE); 
      scroll.getHitRect(rect); 
      if (rect.contains((int) event.getX(), (int) event.getY())) { 
       setPagingEnabled(false); 
       result = false; 
      } else { 
       setPagingEnabled(true); 
      } 
     } 
     return result; 
    } 
1
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (this.enabled) { 
      return super.onTouchEvent(event); 
    } 
    return false; 
} 

public void setPagingEnabled(boolean enabled) { 
    this.enabled = enabled; 
} 

thay thế cho "return false" thành "trở this.enable" và thiết lập giá trị mặc định của this.enable false

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