2011-11-15 3 views
14

내 앱에서 PDF 페이지를 표시하기 위해 Android 용 호환 패키지 버전 4를 사용하고 있습니다. 가로 스크롤보기와 같은 PDF 페이지를 표시하기 위해 PagerAdapter & ViewPager를 사용했습니다.Android에서 ViewPager에서 페이징 사용 중지 및 사용 가능

이제 문제는 페이징 관련 문제입니다.이 스레드 android: ViewPager and HorizontalScrollVIew에 따라 뷰 페이지 내부에서 하위 항목을 감지하여 페이징을 중지 할 수 있지만 사용자가 해당보기 외부에 닿으면 어떻게 다시 사용할 수 있습니까? 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; 
     } 
    } 

시도는 PDF 페이지 외부 접촉하는

는 또한 if(scroll!=null) 두 방향으로 사실이된다.

ViewPager에서 페이징을 계속할 수 있도록 도와주는 방법을 알려줄 수 있습니까?

+1

에 this.enable의 설정하고 기본값 "this.enable을 반환"을 당신이 tryed 유무 : http://stackoverflow.com/a/2655740/969325 – Warpzit

답변

3

확대/축소하기 위해 집게가 필요한 페이징 이미지 파일과 비슷한 문제가있었습니다. 간단히 말해 이미지를 확대 할 때 페이징을 사용하지 않도록 설정하고 전체 이미지가 표시 될 때 페이징을 사용 가능하게 설정해야합니다. 나는 이것을 이렇게 풀어서 비슷한 일을 할 수 있다고 생각합니다. 먼저 확장 : 클래스 MyViewPager는 ViewPager {...} 을 확장 그리고 그 클래스의 재정의 두 가지 방법

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

XML 레이아웃 또는 코드에서 동적 생성에보기 호출기를 사용하십시오

다음.

0

false로 설정했지만 다시 true로 재설정 할 수 없습니다. 또한, 당신의 가로 채기 터치 로직이 좀 이상해 보입니다. 호출기가 가로 채기를 허용하는 유일한 시간은 페이징을 false로 설정했을 때입니다 (따라서 onTouchEvent()에서 처리). 다음은 어떻습니까?

@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; 
} 

교체 "false를 반환"거짓

관련 문제