Android 触摸事件图像视图+;GLSURFACHEVIEW

Android 触摸事件图像视图+;GLSURFACHEVIEW,android,imageview,ontouchlistener,touch-event,glsurfaceview,Android,Imageview,Ontouchlistener,Touch Event,Glsurfaceview,我想知道是否有可能在GLSURFACHEVIEW上有一个ImageView,并获得两者各自的触摸事件。我的问题是,我想知道何时按下ImageView(因此我会使用OnTouchListener)。但是,我仍然希望能够获得我的GLSURFACHEVIEW的touchEvents 我尝试的是从我的GLSURFACHEVIEW中删除onTouchEvent的实现,并使类实现OnTouchListener并实现onTouchEvent,例如: 公共布尔onTouch(视图v,运动事件){ int act

我想知道是否有可能在GLSURFACHEVIEW上有一个ImageView,并获得两者各自的触摸事件。我的问题是,我想知道何时按下ImageView(因此我会使用OnTouchListener)。但是,我仍然希望能够获得我的GLSURFACHEVIEW的touchEvents

我尝试的是从我的GLSURFACHEVIEW中删除onTouchEvent的实现,并使类实现OnTouchListener并实现onTouchEvent,例如:

公共布尔onTouch(视图v,运动事件){ int action=event.getAction()

我这样做的问题是,我无法将触摸imageView和触摸GLSurfaceView结合起来,这正是我真正想要实现的。因此,我尝试添加手指数检查,但仍然无法使其工作,因为当我同时触摸imageView和GLSurfaceView时,仅检测到一个手指。 现在,很难解释,但是当我把一根手指放在imageView上,另一根手指放在我的GLSurfaceView上的其他地方时,不知何故,我在else部分的一段代码被调用,手指的位置在imageView上,而不是另一根手指

一个用例示例是:假设我用双手握住平板电脑。如果我用左手拇指按下此ImageView,我希望右手拇指在屏幕上的手指移动来执行旋转,而不是平移或类似操作

所以,我想知道到目前为止我的实现出了什么问题。也许我没有正确地考虑这个问题。在这种情况下,我很高兴知道出了什么问题以及如何正确地实现这类事情

提前感谢,


编辑: 这是我的活动_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id= "@+id/linearlayout1" >

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="450dp"
    android:id= "@+id/relativeLayout" >


        <com.kitware.VolumeRender.VolumeRenderView
            android:id="@+id/glSurfaceViewID"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.23" />


        <ImageView
            android:id="@+id/ImageView"
            android:layout_width="60dp"
            android:layout_height="70dp"
            android:layout_alignParentLeft="true"
            android:layout_centerInParent="true"
            android:src="@drawable/i3" />

        <ImageView
            android:id="@+id/ImageView2"
            android:layout_width="40dp"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:src="@drawable/tmp" />

</RelativeLayout>        

<Spinner
    android:id="@+id/myspinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/country_arrays"
    android:prompt="@string/country_prompt" /> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id= "@+id/linearlayout2" >
// And so on, the end of the file is irrelevant I suppose

//以此类推,我想文件的结尾是无关紧要的

您可以这样做

imageView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
            v.getParent().requestDisallowInterceptTouchEvent(true);
        } else {
            v.getParent().requestDisallowInterceptTouchEvent(false);
        }
    }
});

你的surfaceView也一样

你可以这样做

imageView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
            v.getParent().requestDisallowInterceptTouchEvent(true);
        } else {
            v.getParent().requestDisallowInterceptTouchEvent(false);
        }
    }
});


你的surfaceView也一样

这两个视图的视图边界相同吗?哪一个在顶部?@Bhargav没有完全理解你的第一个问题。ImageView在顶部。即将编辑以添加我的activity_main.xml内容意味着ImageView完全覆盖了表面视图?如果是这样,你的surfaceView将永远无法获得focus@Bhargav,所以它实际上没有完全覆盖我的GLSURFACHEVIEW。你可以在我的编辑器中看到详细信息。这两个视图的视图边界相同吗?还有哪个在顶部?@Bhargav没有完全理解你的第一个问题。ImageView在顶部。即将编辑以添加我的activity_main.xml内容意味着ImageView完全覆盖了表面e视图?如果是这样,您的surfaceView将永远无法获得focus@Bhargav,所以它实际上没有完全覆盖我的GLSURFACHEVIEW。你可以在我的编辑器中看到详细信息。不确定这是否会起作用。我希望能够同时触摸我的ImageView和GLSURFACHEVIEW,而不是ImageView或GLSURFACHEVIEW的二进制内容,which是我已经拥有的。你的代码将如何改变这一点?我不确定我是否理解这段代码的用途。是的,只要它们都是可聚焦的,你就可以触摸它们,正如你从代码中看到的,当hasFocus为false时,false被传递到
v.getParent()。requestDisallowerWinterCeptTouchEvent(false)
刚刚尝试过,它并没有改变并发触摸事件不能正常工作的事实。问题是,我在GLSURFACHEVIEW PROCESTOUCHEVENT中的代码块是用手指在ImageView上的位置调用的,然后当imagview具有焦点nake时,表面会单击False,但我不希望它不可单击。请查看使用case我在问题中提供了更多信息。有点难以解释^^不确定这是否可行。我希望能够同时触摸ImageView和GLSurfaceView,而不是ImageView或GLSurfaceView中的二进制内容,这是我已经拥有的。您的代码将如何更改此内容?我不确定我是否理解了解该代码的用途是的,只要它们都是可聚焦的,您就可以触摸它们,从代码中可以看出,当hasFocus为false时,false被传递给
v.getParent()。requestDisallowernCepttouchevent(false)
刚刚尝试过,它并没有改变并发触摸事件不能正常工作的事实。问题是,我在GLSURFACHEVIEW PROCESTOUCHEVENT中的代码块是用手指在ImageView上的位置调用的,然后当imagview具有焦点nake时,表面会单击False,但我不希望它不可单击。请查看使用cas我在问题中提供了更多的信息。有点难以解释^^