我已经用于ViewPager
图像滑动,我需要使用缩放选项查看图像,图像被缩放但在缩放图像时分页中断。已经尝试过。禁用onTouchEvent()
和OnInterceptTouchEvent()
启用ViewPager
导致强制关闭。
问问题
2125 次
4 回答
2
子类ViewPager
和覆盖canScroll()
。您将被传递到检测到触摸事件的小部件,true
如果您希望将滚动事件传递给该小部件或者false
您希望ViewPager
使用该滚动量,则可以返回。在您的情况下,您将在缩放时使用自己的自定义逻辑,并在未缩放时简单地链接到超类。
于 2013-09-16T11:59:08.290 回答
1
我也遇到过同样的问题,我做了以下解决这个问题。我使用了一个自定义 ViewPager 类。
自定义视图页面.java
public class CustomViewPager extends ViewPager {
private boolean isPagingEnabled;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.isPagingEnabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.isPagingEnabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.isPagingEnabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean b) {
this.isPagingEnabled = b;
}
}
并禁用滚动使用以下代码段,
CustomViewPager pager = (CustomViewPager) findViewById(R.id.pager);
pager.setPagingEnabled(false);
如果您需要更多信息,那么您可以询问。希望能帮助到你。
于 2013-09-16T12:05:53.010 回答
1
我知道这个问题已经过时了,但是对于其他正在寻找答案的人来说,Mike Ortiz TouchImageView开箱即用,(您可能需要切换到 dev 分支)
于 2014-01-12T02:48:26.930 回答
0
我用以下方式做到了这一点,当用户缩放时它会禁用分页,但是当他点击缩放后的图像视图的边缘时,它会正确地分页到下一个/上一个图像。
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(handleTouch(ev)) {
return super.onTouchEvent(ev);
}
else {
return false;
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(handleTouch(ev) && !areCommentsOpen()) {
return super.onInterceptTouchEvent(ev);
}
else {
return false;
}
}
private boolean handleTouch(MotionEvent ev) {
if (prevX != -666 && ev.getAction() == MotionEvent.ACTION_MOVE) {
if(ev.getX() <= prevX) {
isGoingLeft=false;
}
else {
isGoingLeft=true;
}
}
else if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) {
return true;
}
ZoomableImageView imageView = getImageView();
if(imageView == null) {
return true;
}
prevX=ev.getX();
if(imageView.getZoomLevel() <= 1f) {
return true;
}
else if(imageView.isBoundedLeft()) {
if(isTransitioning) {
return true;
}
else if (isGoingLeft) {
isTransitioning = true;
return true;
}
else {
return false;
}
}
else if (imageView.isBoundedRight()) {
if(isTransitioning) {
return true;
}
else if (!isGoingLeft) {
isTransitioning = true;
return true;
}
else {
return false;
}
}
else {
isTransitioning = false;
return false;
}
}
private ZoomableImageView getImageView() {
for (int i = 0; i < getChildCount(); i++) {
ZoomableImageView imageView = (ZoomableImageView) (getChildAt(i).findViewById(R.id.single_image_view));
if(imageView.getPosition() == getCurrentItem()) {
return imageView;
}
}
return null;
}
public void setTransitioning(boolean trans) {
this.isTransitioning = trans;
}
public void setGoingLeft(boolean left) {
this.isGoingLeft = left;
}
于 2013-09-16T12:06:40.157 回答