1

Je me demandais s'il était possible d'avoir un ImageView sur un GLSurfaceView et d'obtenir les événements tactiles respectifs des deux. Mon problème est que je veux savoir quand l'ImageView est pressé (ainsi j'utiliserais un OnTouchListener). Mais encore, je veux être en mesure d'obtenir le touchEvents de mon GLSurfaceView.Touch Events ImageView + GLSurfaceView

Ce que j'ai essayé est de supprimer la mise en œuvre de onTouchEvent de mon GLSurfaceView et faire la classe implémente OnTouchListener et mettre en œuvre onTouchsuch comme:

OnTouch public boolean (Voir v, événement MotionEvent) { action int = événement. getAction();

if(v.getId() == R.id.ImageView ;){ 
    switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      //Do something 
      break ; 
     //.... 
    } 
} 
else{ 
    //Process GLSurfaceView touch events 
} 
}         

Le problème quand je fais cela est que je ne peux pas toucher combiner mon imageView et toucher mon GLSurfaceView qui est ce que je veux vraiment atteindre. J'ai donc essayé d'ajouter un contrôle sur le nombre de doigts, mais je n'arrive toujours pas à le faire fonctionner car un seul doigt est détecté lorsque je touche à la fois l'ImageView et le GLSurfaceView. Maintenant, c'est difficile à expliquer mais quand je mets un doigt sur l'imageView et un autre doigt sur mon GLSurfaceView, mon morceau de code dans la partie else est appelé avec la position du doigt sur l'ImageView, et pas l'autre . Un exemple de cas d'utilisation serait: Imaginez que j'utilise mes deux mains tout en tenant la tablette. Si j'appuie sur cette ImageView avec mon pouce sur la main gauche, je veux que les mouvements du doigt de mon pouce droit sur l'écran effectuent des rotations au lieu des traductions ou quelque chose comme ça. Donc, je me demandais ce qui n'allait pas dans ma mise en œuvre jusqu'à maintenant. Peut-être que je ne considère pas le problème correctement. Dans ce cas, je serais heureux de savoir ce qui ne va pas et de mettre en œuvre correctement ce genre de choses.

Merci à l'avance,


Edit: Voici mon activity_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 
+0

sont les limites de vue de ces deux vues mêmes? Aussi qui est sur le dessus? – Bhargav

+0

@Bhargav n'a pas tout à fait votre première question. L'ImageView est en haut. Venant modifier pour ajouter mon contenu activity_main.xml – LBes

+0

ce qui signifie que le ImageView est complètement couvrant sur la vue de surface? SI c'est le cas, votre SurfaceView ne peut jamais prendre le focus – Bhargav

Répondre

0

Vous pouvez faire quelque chose comme ça

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

Et même avec votre surfaceView aussi

+0

Pas sûr que cela va fonctionner. Je veux être capable de toucher à la fois mon ImageView et le GLSurfaceView en même temps, ne pas avoir quelque chose de binaire soit l'imageView ou le GLSurfaceView, qui est ce que j'ai déjà. Comment votre code va-t-il changer cela? Je ne suis pas sûr de comprendre le but de ce morceau de code – LBes

+0

oui vous serez en mesure de toucher les deux tant que les deux sont focalisables, comme vous pouvez le voir dans le code, lorsque hasFocus est faux, false est passé à 'v.getParent(). requestDisallowInterceptTouchEvent (false)' – Bhargav

+0

Juste essayé, cela ne change rien au fait que les événements tactiles simultanés ne fonctionnent pas correctement.Le problème est que mon morceau de code dans le GLSurfaceView ProccesTouchEvent est appelé avec la position du doigt sur l'imageView – LBes