2017-03-05 36 views
0

我已经创建了标准手势检测器,根据给定的手势更改文本视图。当我的XML仅包含相对布局和我希望更改的文本视图时,所有工作都很好。但是,当我添加网格布局和几个图标时,手势检测器不再起作用,只是不像以前那样更改文本视图。代码是; 代码是;手势检测器无法处理新布局

<?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> 

和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; 

    } 

} 

注意,如果我注释掉网格布局和图像视图,然后代码工作再次改变TextView的。我只能假设手势探测器现在被埋在网格布局下方,但不确定?

回答

1

尝试在布局中删除此行,他们是没用的,你的情况

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