java - setOnTouchListener 不适用于相对布局或 viewFlipper

标签 java android xml android-relativelayout

我有这个 XML 代码:

<RelativeLayout
        android:id="@+id/home_fragment_riddle_flipper_holder_RelativeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusableInTouchMode="true"
        android:focusable="true" 
        android:clickable="false"
        android:layout_below="@+id/relativeLayout1" >

        <ViewFlipper
            android:id="@+id/home_fragment_riddle_flipper_ViewFlipper"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true" >

            <ScrollView
                android:id="@+id/scrollView1"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#FFFFFF"
                    android:orientation="vertical" >
                </LinearLayout>
            </ScrollView>

            <ScrollView
                android:id="@+id/scrollView2"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#000000"
                    android:orientation="vertical" >
                </LinearLayout>
            </ScrollView>
        </ViewFlipper>
    </RelativeLayout>

以及这个java/android代码:

public class HomeFragment extends Fragment implements OnGestureListener 
{
    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_TRESHOLD_VELOCITY = 200;

        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {
        thisFragment = LayoutInflater.from(getActivity()).inflate(R.layout.home_fragment, null);

        //views
        riddleFlipper = (ViewFlipper) thisFragment.findViewById(R.id.home_fragment_riddle_flipper_ViewFlipper);
        userImage = (ImageView) thisFragment.findViewById(R.id.home_fragment_user_image_ImageView);
        FlipperHolder = (RelativeLayout) thisFragment.findViewById(R.id.home_fragment_riddle_flipper_holder_RelativeLayout);

        slideLeftIn = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_left_in);
        slideLeftOut = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_left_out);
        slideRightIn = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_right_in);
        slideRightOut = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_right_out);

        //sliding
        detecture = new GestureDetector(getActivity(), this);

        FlipperHolder.setOnTouchListener(new OnTouchListener()
        {

            @Override
            public boolean onTouch(View view, MotionEvent event)
            {
                detecture.onTouchEvent(event);
                return true;
            }
        });


        return thisFragment;
    }

@Override
    public boolean onDown(MotionEvent e)
    {
        return true;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
    {
        if(Math.abs(e1.getY() - e2.getY()) > 250)
            return false;
        if((e1.getX() - e2.getX()) > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_TRESHOLD_VELOCITY)
        {
            Toast.makeText(getActivity(), "a", Toast.LENGTH_SHORT).show();
            riddleFlipper.setInAnimation(slideLeftIn);
            riddleFlipper.setOutAnimation(slideLeftOut);
            riddleFlipper.showNext();
        }
        else if((e2.getX() - e1.getX()) > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_TRESHOLD_VELOCITY)
        {
            Toast.makeText(getActivity(), "b", Toast.LENGTH_SHORT).show();
            riddleFlipper.setInAnimation(slideRightIn);
            riddleFlipper.setOutAnimation(slideRightOut);
            riddleFlipper.showNext();
        }

        return false;
    }

:

FlipperHolder.setOnTouchListener(new OnTouchListener()
        {

            @Override
            public boolean onTouch(View view, MotionEvent event)
            {
                detecture.onTouchEvent(event);
                return true;
            }
        });

代码永远不会在相对布局或 View 翻转器上被调用,但在 ImageView 上会被调用。我应该怎么做才能使其在相对布局或 View 翻转器上工作?

谢谢

最佳答案

我认为对于包含其他 View 的 View ,您应该使用 onInterceptTouchEvent相反:

@Override
public boolean onInterceptTouchEvent(final MotionEvent ev) {
    //do your stuff here
    return super.onInterceptTouchEvent(ev);
}

关于java - setOnTouchListener 不适用于相对布局或 viewFlipper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304059/

相关文章:

Android:更改设备设置时的布局大小问题

xml - 使用 XSLT 生成 html 表的多个动态行

java - 如何使用 JAVA 在 Spark DataFrame 上调用 UDF?

java - 如何通过单击单选按钮将值从表传递到 servlet?

java - Android ImageButton 构建成功但不显示

android - 位图作为通知图标

android - 在自定义 Runnable 中使用 Retrofit 执行请求

java - 除了如下所示的更改目标之外,我可以保留 xml 格式还是保留原始格式吗?

Java 如何关闭程序并从 GUI 移动到另一个程序

java - autoRead 为 false 时读取了多少数据?