2017-03-05 8 views
0

J'ai créé le détecteur de mouvement standard qui change une vue de texte en fonction du geste donné. Tout fonctionne correctement lorsque mon XML contient uniquement la disposition relative et la vue de texte que je souhaite modifier. Cependant quand j'ajoute une disposition de gird et quelques icônes le détecteur de mouvement ne fonctionne plus, ne changeant tout simplement pas le textview comme avant. Le code est;GestureDetector ne fonctionne pas sur la nouvelle mise en page

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/Relative_Layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:background="@drawable/homebackground" 
tools:context="com.example.james.fitness.MainActivity" 
android:clickable="true" 
android:focusable="true" 
android:focusableInTouchMode="true"> 

    <GridLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     android:id="@+id/Grid1"> 

     <TextView 
      android:id="@+id/someText" 
      android:text="sometext" 
      android:foregroundGravity="center_vertical|center_horizontal" 
      android:gravity="center_vertical|center" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleX="5" 
      android:scaleY="5" 
      android:textColor="@color/colorAccent" /> 

     <ImageView 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      app:srcCompat="@drawable/fitnessbutton" 
      android:id="@+id/fitnessbutton" 
      android:layout_row="1" 
      android:layout_column="1" 
      android:layout_columnWeight="1" 
      android:layout_gravity="fill_horizontal" 
      android:gravity="center" 
      android:paddingBottom="100dp" /> 

     <ImageView 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      app:srcCompat="@drawable/drinkbutton" 
      android:id="@+id/drinkbutton" 
      android:layout_column="2" 
      android:layout_row="1" 
      android:layout_columnWeight="1" 
      android:layout_gravity="fill_horizontal" 
      android:gravity="center" 
      android:paddingBottom="100dp" /> 

     <ImageView 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      app:srcCompat="@drawable/foodbutton" 
      android:id="@+id/foodbutton" 
      android:layout_column="3" 
      android:layout_row="1" 
      android:layout_columnWeight="1" 
      android:layout_gravity="fill_horizontal" 
      android:gravity="center" 
      android:paddingBottom="100dp" /> 
    </GridLayout> 
</RelativeLayout> 

Et Java

import android.app.Activity; 
import android.support.v4.view.GestureDetectorCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.GestureDetector; 
import android.view.GestureDetector.OnGestureListener; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 



public class MainActivity extends Activity implements 
     GestureDetector.OnGestureListener, 
     GestureDetector.OnDoubleTapListener { 


    private TextView someText; 
    private GestureDetectorCompat gestureDetector; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     someText = (TextView)findViewById(R.id.someText); 
     this.gestureDetector = new GestureDetectorCompat(this, this); 
     gestureDetector.setOnDoubleTapListener(this); 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     someText.setText("SINGLETAP"); 
     return true; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     someText.setText("DOUBLETAP"); 
     return true; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent e) { 
     someText.setText("DOUBLETAPEVENT"); 
     return true; 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     someText.setText("DOWN"); 
     return true; 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 
     someText.setText("PRESS"); 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     someText.setText("SINGLETAPUP"); 
     return true; 
    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     someText.setText("SCROLL"); 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     someText.setText("LONGPRESS"); 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     someText.setText("FLING"); 
     return true; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     gestureDetector.onTouchEvent(event); 
     return false; 

    } 

} 

Remarque si je commente la présentation de la grille et les vues d'image, puis le code fonctionne à nouveau l'évolution textview. Je ne peux que supposer que le détecteur de gestes est maintenant enterré sous la disposition de la grille, mais n'êtes pas sûr?

Répondre

1

Essayez de supprimer ces lignes dans votre mise en page, ils sont inutiles dans votre cas

android:clickable="true" 
android:focusable="true" 
android:focusableInTouchMode="true"