2

单击 ScrollView 子项时,我无法在容器上触发 onTouch 事件。

我在 Galaxy tab 10.1 上使用 API 12。

有人可以帮忙吗?

谢谢

活动

public class TestActivity extends Activity{

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.dude);

        LinearLayout mylayout = (LinearLayout) findViewById(R.id.mylayout);        

        mylayout.setOnTouchListener(new OnTouchListener () {
            public boolean onTouch(View view, MotionEvent event) {

                // Only called when touched outside the ScrollView

                if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
                    /* do stuff */
                } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
                    /* do stuff */
                }
                return true;
            }
        });        
    }
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mylayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:gravity="center"
        android:text="Touch here trigger parent&apos;s onTouch"
        android:textColor="#000000"
        android:textSize="40sp" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="1000dp"
                android:background="#b00000"
                android:gravity="center"
                android:text="Touch here DOES NOT trigger parent&apos;s onTouch"
                android:textColor="#000000"
                android:textSize="40sp" />
        </RelativeLayout>
    </ScrollView>

</LinearLayout>

在此处输入图像描述

4

3 回答 3

1
mylayout.setOnTouchListener(new OnTouchListener () {
            public boolean onTouch(View view, MotionEvent event) {

                // Only called when touched outside the ScrollView

                if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
                    /* do stuff */
                    return true;
                } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
                    /* do stuff */
                    return true;
                }
                return false;
            }
        });

这应该可以工作...但是当您用力甩动它时不再具有自动滚动功能...它将是一个粘性滚动,仅在您拖动时移动。

于 2013-04-03T03:44:12.750 回答
0

您是否尝试创建一个 OnClickListener 并将其添加到所有孩子?也许这可以解决您的问题,因为 ScrollView 使它的孩子可以滚动,所以它没有自己的区域可以点击。(如果我错了,请纠正我^^)

于 2012-04-23T15:30:41.067 回答
0

您可能需要此代码

@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
onTouchEvent(ev);
return false;
}
于 2017-06-19T15:49:51.620 回答