0

一个片段有两个视图,一个 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;
}
4

2 回答 2

1

如果你给

  android:clickable="true"

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

于 2014-09-25T03:46:55.353 回答
0

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

请参考此文档: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;
    }

}
于 2014-09-25T03:05:27.510 回答