android pageView翻页和imageView拖拽冲突问题怎么解决

风过后 发布于 2013/12/19 14:45
阅读 3K+
收藏 0
我用pageView做图片的浏览,imageView可以放大缩小但是左右滑动时无法判断是pageView的翻页还是imageView的拖拽事件。请问各路大神怎么解决这个问题,在线等急~谢谢!
加载中
0
nevans
nevans
你的pageView可以不需要处理滑动事件,如果在pageView上滑动,你不响应这个事件,事件就会传给底部的ImageView了。
风过后
回复 @岁月安神 : 刚刚才看到哈,你的问题解决了吗?没解决的话我可以给你代码
岁月安神
岁月安神
回复 @风过后 : 楼主你这个是怎么做的啊,我现在用的是viewPage做的滑动页卡,里面都有显示图片的,就是滑动时,图片的放大缩小事件被viewPage覆盖了,怎么弄啊
nevans
nevans
这个方法我没用过,你试了吗。
风过后
恩,谢谢哈,已经有一些头绪了。super.requestDisallowInterceptTouchEvent(true);封装pageView组件然后用这行代码将事件交给imageView对吗?
0
风过后
怎么判断imageView的边界,然后翻页
0
iuKa
iuKa
两个方法是关键,onIntercepterTouchEvent和dispatchTouchEvent
风过后
我现在有一个新的问题,怎么判断图片的边界呢?到了这个边界我就让viewPager来处理翻页效果。 我现在是用的这个条件判断的但是有点问题 DragImageView.left !=0 && DragImageView.right != ConstDefinition.screenWidth
风过后
恩 是的 谢谢哈
0
风过后

引用来自“nevans”的答案

你的pageView可以不需要处理滑动事件,如果在pageView上滑动,你不响应这个事件,事件就会传给底部的ImageView了。
嗯,刚试过了是可以的。
在我重写的viewPager组件中我这样写到:
case MotionEvent.ACTION_DOWN:
            if(DragImageView.left !=0 && DragImageView.right != ConstDefinition.screenWidth){
            super.requestDisallowInterceptTouchEvent(true);
            }
                    break;
可以拦截请求
0
nevans
nevans

<RelativeLayout>

    <ViewPager ...>

    <PageView android:alignParentCenter="true" />

</RelativeLayout>

UI层次是这样?

风过后
回复 @nevans : BaseViewpager就是继承自ViewPager啊
nevans
nevans
回复 @风过后 : PageView在哪!!!!
风过后
然后imageView是自己写的一个控件,继承于ImageView
风过后
<RelativeLayout> <BaseViewPager android:id="@+id/view_pager" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </RelativeLayout> 这样的
0
风过后

引用来自“nevans”的答案

<RelativeLayout>

    <ViewPager ...>

    <PageView android:alignParentCenter="true" />

</RelativeLayout>

UI层次是这样?

我把我重写的ViewPager贴出来,就是处理了下拦截事件

public class BaseViewPager extends ViewPager{


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

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

public static ViewPager mPager;//此处我直接在调用的时候静态赋值过来 的
    String TAG="@";
    public boolean dispatchTouchEvent(MotionEvent ev) {
            // TODO Auto-generated method stub       
            final float x = ev.getX();
            switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
            if(DragImageView.left !=0 && DragImageView.right != ConstDefinition.screenWidth){
            super.requestDisallowInterceptTouchEvent(true);
            }
                    break;
            case MotionEvent.ACTION_MOVE:
            if(DragImageView.left !=0 && DragImageView.right != ConstDefinition.screenWidth){ //若没有达到边界就交给子view来处理
            super.requestDisallowInterceptTouchEvent(true);
            }
                    break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
            ActImageShow.viewPager.requestDisallowInterceptTouchEvent(false);
                    break;
            }
            return super.dispatchTouchEvent(ev);
    }




    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
            // TODO Auto-generated method stub
            return super.onInterceptTouchEvent(ev);
    }




    @Override
    public boolean onTouchEvent(MotionEvent event) {
            // TODO Auto-generated method stub
            return super.onTouchEvent(event);
    }


}


0
nevans
nevans
哦,我理解了,你既然只有一个View,在这个View上实现放大跟翻页效果,就别说pageView、imageView嘛,看起来像是有两个view一样,你怎么问问题的,晕倒。。。。。
0
风过后

引用来自“nevans”的答案

哦,我理解了,你既然只有一个View,在这个View上实现放大跟翻页效果,就别说pageView、imageView嘛,看起来像是有两个view一样,你怎么问问题的,晕倒。。。。。
不是啊 大哥。
DragImageView imageView = null; 这里我声明了一个imageView,DragImageView是继承自ImageView的。
List<LinearLayout> pageViews = new ArrayList<LinearLayout>(); //声明LinearLayout的列表
LinearLayout llayout = null;我声明了一个LinerLayout

LayoutParams params = new LayoutParams(ConstDefinition.screenWidth,ConstDefinition.screenHeight);
imageView.setLayoutParams(params);
llayout.addView(imageView);   //这里将imageView对象放入llayout中

pageViews.add(llayout); //再将llayout放入pageViews中

然后再pageAdapter中是这样的

//初始化position位置的界面
@Override
public Object instantiateItem(View v, int position) {
((ViewPager) v).removeView(pageViews.get(position%pageViews.size()));
((ViewPager) v).addView(pageViews.get(position%pageViews.size())); 
return pageViews.get(position%pageViews.size());  
}

我现在要做的是放大缩小imageView已经做好,但是在放大之后图片超出边界,这时候滑动时翻到下一页还是执行图片的拖拽事件,这个有冲突。我的问题是这样的。
ps:谢谢大哥这么耐心哈


返回顶部
顶部