在片段中的viewPager上方的FrameLayout onTouch事件已拦截bean

时间:2014-09-25 02:16:21

标签: android android-viewpager fragment ontouch

一个片段有两个视图,一个FrameLayout包含一些子视图,在FrameLayout下面有一个viewPager。  我希望在FrameLayout上有像ACTION_MOVE这样的动作时替换片段,所以我在FrameLayout上添加一个onTouchListener但是它从不起作用,viewPager工作得很好,而且FrameLayout的子视图也有onClick事件

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    view =  inflater.inflate(R.layout.hall_gift, container,
            false);
    frameLayout = (FrameLayout)view.findViewById(R.id.fans_body_title);
    frameLayout.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction()==MotionEvent.ACTION_DOWN){
                Log.i(TAG,"ACTION DOWN");
            }

            return false;
        }
    });
    return view;
}

2 个答案:

答案 0 :(得分:1)

如果你给

  android:clickable="true"

到你的framelayout 它不允许触摸您的viewpager

答案 1 :(得分:0)

您可以扩展FrameLayout并覆盖其onInterceptTouchEvent()以拦截子视图中的触摸事件。然后,使用自定义的FrameLayout而不是之前的FrameLayout。

Plz参考这个文件: http://developer.android.com/training/gestures/viewgroup.html#intercept

以下是代码段:

public class MyFrameLayout extends FrameLayout {

   @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

    /*
     * This method determines whether we want to intercept the motion.
     * If we return true, onTouchEvent will be called.
     */

           final int action = MotionEventCompat.getActionMasked(ev);    
            switch (action) {
                case MotionEvent.ACTION_MOVE: {
                    if(meet your condition){
                        return true;
                    }
                }

            }
        return false;
    }

}