Android 将图像放大到TouchImageView时禁用垂直视图寻呼机

Android 将图像放大到TouchImageView时禁用垂直视图寻呼机,android,android-viewpager,touchimageview,Android,Android Viewpager,Touchimageview,我正在使用和进行图像放大/缩小。当我放大图像并尝试向下拖动图像(查看图像的底部部分)时,查看页面将滑动到第二个图像。任何帮助都将不胜感激。我需要禁用viewpager我试图更改垂直视图寻呼机的canScroll功能,但没有帮助 以下是我修改的代码: protected boolean canScroll(View v, boolean checkV, int dy, int x, int y) { if(v instanceof TouchImageView) { Lo

我正在使用和进行图像放大/缩小。当我放大图像并尝试向下拖动图像(查看图像的底部部分)时,查看页面将滑动到第二个图像。任何帮助都将不胜感激。我需要禁用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;
}
protected boolean canScroll(视图v、布尔检查v、整数dy、整数x、整数y){
if(v TouchImageView实例)
{
Log.d(“此处”、“此处”);
如果((TouchImageView)v.getCurrentZoom()!=1)
{
Log.d(“此处”、“再次此处”);
返回false;
}
}
else if(视图组的v实例){
最终视图组=(视图组)v;
final int scrollX=v.getScrollX();
final int scrollY=v.getScrollY();
final int count=group.getChildCount();
//向后计数-让最顶端的视图首先消耗滚动距离。
对于(int i=count-1;i>=0;i--){
//TODO:在此处为转换视图添加版本化支持。
//这不适用于蜂窝中的变换视图+
最终视图child=group.getChildAt(i);
如果(y+scrollY>=child.getTop()&&y+scrollY=child.getLeft()&&x+scrollX
要解决这个问题,请创建一个自定义的
VerticalViewPage
类,该类重写滚动事件(
onTouchEvent
onInterceptTouchEvent
),然后根据您是否要滚动,从中返回
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

因此,您可以随时在
true
false
之间切换,以允许和禁用使用
custom_vvp.setScroll()
方法进行滚动。

要解决此问题,请创建一个自定义
VerticalViewPage
类,该类覆盖滚动事件(
onTouchEvent
onInterceptTouchEvent
),然后根据您是否要滚动,从中返回
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

因此,您可以随时在
true
false
之间切换,以允许和禁用使用
custom_vvp.setScroll()
方法进行滚动。

要解决此问题,请创建一个自定义
VerticalViewPage
类,该类覆盖滚动事件(
onTouchEvent
onInterceptTouchEvent
),然后根据您是否要滚动,从中返回
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

因此,您可以随时在
true
false
之间切换,以允许和禁用使用
custom_vvp.setScroll()
方法进行滚动。

要解决此问题,请创建一个自定义
VerticalViewPage
类,该类覆盖滚动事件(
onTouchEvent
onInterceptTouchEvent
),然后根据您是否要滚动,从中返回
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

因此,您可以随时在
true
false
之间切换,以允许和禁用使用
custom_vvp.setScroll()
方法进行滚动。

另一种方法是将TouchImageView子类化并覆盖CanScrollVertical方法,如下所示:

@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;
}
@覆盖
公共布尔值可垂直滚动(整数方向){
矩阵值(m);
浮点y=m[矩阵MTRANS_y];
如果(getImageHeight()=-1&&方向<0)为else{
返回false;
}else if(Math.abs(y)+viewHeight+1>=getImageHeight()&&direction>0){
返回false;
}
返回true;
}
如果图像缩小,则滑动会更改页面。如果图像被放大,则他们可以在不更改页面的情况下在图像周围平移,直到到达缩放图像的顶部或底部,此时下一次滑动将更改页面


希望这会有所帮助

另一种方法是将TouchImageView子类化并覆盖CanScrollVertical方法,如下所示:

@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;
}
@覆盖
公共布尔值可垂直滚动(整数方向){
矩阵值(m);
浮点y=m[矩阵MTRANS_y];
如果(getImageHeight()=-1&&方向<0)为else{
返回false;
}else if(Math.abs(y)+viewHeight+1>=getImageHeight()&&direction>0){
返回false;
}
返回true;
}
如果图像缩小,则滑动会更改页面。如果图像被放大,则他们可以在不更改页面的情况下在图像周围平移,直到到达缩放图像的顶部或底部,此时下一次滑动将更改页面


希望这会有所帮助

另一种方法是将TouchImageView子类化并覆盖CanScrollVertical方法,如下所示:

@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;
}
@覆盖
公共布尔值可垂直滚动(整数方向){
矩阵值(m);
浮点y=m[矩阵MTRANS_y];
如果(getImageHeight()=-1&&方向<0)为else{
返回false;
}else if(Math.abs(y)+viewHeight+1>=getImageHeight()&&direction>0){
返回false;
}
返回true;
}
如果图像被缩小,则