Android - 如果视图具有单击侦听器,如何检测触摸侦听器

时间:2014-06-24 11:04:14

标签: android android-layout ontouchlistener

我有线性布局的基本布局,ScrollView和ImageView。

ScrollView已注册onTouchListener和imageview onClicklistener。 如果我点击ImageView并且我退出了ImageView,我看不到带有" onclick"的日志。

如果我点击了imageView(在scrollView上)并且我正在某处,我会在"触摸"上看到日志。 当我退出时,如何在imageView上捕获onTouch事件?

以下是代码:

ImageView testButton = (ImageView) myView.findViewById(R.id.imageView1);
testButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        Log.d(tag, "onclick");

    }
});

ScrollView scrollView = (ScrollView) myView.findViewById(R.id.scrollView1);
scrollView.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d(tag, "ontouch");

        return false;
    }
});

这里是xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/com_facebook_blue"
        android:scrollbarAlwaysDrawVerticalTrack="false" >

        <LinearLayout
            android:id="@+id/LinearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/com_facebook_profile_picture_blank_square"     />

        </LinearLayout>


    </ScrollView>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

将此设置为滚动视图:

ScrollView mainScroll=(ScrollView) findViewById(R.id.your_scroll_view)
mainScroll.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
mainScroll.setFocusable(true);  //If you need this
mainScroll.setFocusableInTouchMode(true);  //If you need this

然后会触发您的imageView onclick听众。此代码也可能会严重影响您功能的其他部分。因此,请在执行此操作后检查视图,并在发生任何屏幕跳转时进行恢复。

答案 1 :(得分:0)

也将OnTouchListener设置为ImageView。当您从视图的可触摸区域拉开触摸时,它将触发Touch事件。取消ontouch(MotionEvent.ACTION_CANCEL)时不会触发OnClick。您不应该使用onTouch()因此在onTouch()

中返回false