2014-12-07 4 views
0

이미지 확대/축소에는 VerticalViewPagerTouchImageView을 사용하고 있습니다. 이미지를 확대하고 이미지를 아래로 드래그하면 (이미지의 아래쪽 부분을보기 위해) 뷰 호출기가 두 번째 이미지로 스 와이프합니다. 어떤 도움을 주시면 감사하겠습니다. viewpager를 비활성화해야합니다. 세로보기 호출기의 canScroll 기능을 변경하려고했지만 도움이되지 않았습니다. 여기 이미지 확대/축소시 세로보기 호출기 사용 안 함

내가 수정 한 코드입니다 :

protected boolean canScroll(View v, boolean checkV, int dy, int x, int y) { 
    if(v instanceof TouchImageView) 
    { 
     Log.d("Here","Here"); 
     if(((TouchImageView) v).getCurrentZoom()!=1) 
     { 
      Log.d("Here","HereAgain"); 

      return false; 
     } 
    } 

    else if (v instanceof ViewGroup) { 
     final ViewGroup group = (ViewGroup) v; 
     final int scrollX = v.getScrollX(); 
     final int scrollY = v.getScrollY(); 
     final int count = group.getChildCount(); 
     // Count backwards - let topmost views consume scroll distance first. 
     for (int i = count - 1; i >= 0; i--) { 
      // TODO: Add versioned support here for transformed views. 
      // This will not work for transformed views in Honeycomb+ 
      final View child = group.getChildAt(i); 
      if (y + scrollY >= child.getTop() && y + scrollY < child.getBottom() && 
        x + scrollX >= child.getLeft() && x + scrollX < child.getRight() && 
        canScroll(child, true, dy, x + scrollX - child.getLeft(), 
          y + scrollY - child.getTop())) { 
       return true; 
      } 
     } 

     return checkV && ViewCompat.canScrollVertically(v, -dy); 
    } 

    return false; 
} 

답변

2

는, 그 해결 스크롤 이벤트 (onTouchEvent, onInterceptTouchEvent)을 재정의하는 사용자 정의 VerticalViewPager 클래스를 만들려면, 다음에 따라 그 true 또는 false에서 반환하면 경우 스크롤 여부하려면, 그 의지는 미리 정의 된 부울 변수를 통해 달성 :

import android.content.Context; 
import android.view.MotionEvent; 

public class CustomizongVVP extends VerticalViewPager { 

    public boolean scroll = true; 

    public CustomizongVVP(Context context) { 
     super(context); 
    } 

    public CustomizongVVP(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return scroll && super.onTouchEvent(event); 
    } 

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

    public void setScroll(boolean scroll) { 
     this.scroll = scroll; 
    } 

} 

과 수비력 오프라인 :

CustomizongVVP custom_vvp = new CustomizongVVP(this); 
custom_vvp.setScroll(true); // to allow scrolling 
custom_vvp.setScroll(false); // to disable scrolling 

그래서, 당신은 할 수 있도록 truefalse 사이에 언제든지 전환 할 수 있습니다 및 custom_vvp.setScroll() 방법을 사용하여 스크롤을 사용하지 않습니다.

+0

확장 세로보기 호출기 클래스이지만 레이아웃 파일에서 사용자 정의보기를 정의하면 오류가 발생합니다. –

+0

레이아웃 문제가 수정되었습니다. –

+0

@sohaibfarooqi 그것은 당신에게 어떤 오류가 있습니까? 무슨 문제를 해결 했니? –

1

또 다른 방법은 다음과 같이 TouchImageView를 서브 클래스와 canScrollVertically 메서드를 재정의하는 것입니다 : 이미지가 다음 강타 변경 페이지를 축소한다

@Override 
public boolean canScrollVertically(int direction) { 
    matrix.getValues(m); 
    float y = m[Matrix.MTRANS_Y]; 

    if (getImageHeight() < viewHeight) { 
     return false; 

    } else if (y >= -1 && direction < 0) { 
     return false; 

    } else if (Math.abs(y) + viewHeight + 1 >= getImageHeight() && direction > 0) { 
     return false; 
    } 

    return true; 
} 

합니다. 이미지가 확대되면 확대 된 이미지의 상단이나 하단에 도달 할 때까지 페이지를 변경하지 않고 이미지 주위를 패닝 할 수 있습니다. 그 다음 스 와이프가 페이지를 변경합니다.

희망 하시겠습니까?