2012-07-03 4 views
8

Я хотел бы добавить GestureDetector ко всем представлениям (группам представлений), не присваивая их каждому отдельному виду. Прямо сейчас onFling() активируется только при прокрутке по фону, но не при прокрутке напр. button1.Установить GestureDetector ко всем дочерним представлениям

package com.app.example; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 
import android.widget.LinearLayout; 

public class ExampleActivity extends Activity { 
    Context mContext = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mContext = this; 

     LinearLayout parent = new LinearLayout(mContext); 
     parent.setOrientation(LinearLayout.VERTICAL); 
     parent.setBackgroundColor(Color.RED); 

     Button button1 = new Button(mContext); 
     button1.setText("Button 1"); 
     Button button2 = new Button(mContext); 
     button2.setText("Button 2"); 

     parent.addView(button1); 
     parent.addView(button2); 

     final GestureDetector gestureDetector = new GestureDetector(
       new MyGestureDetector()); 

     parent.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       gestureDetector.onTouchEvent(event); 

       return true; 
      } 
     }); 

     setContentView(parent); 
    } 
} 

class MyGestureDetector extends SimpleOnGestureListener { 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, 
      float velocityX, float velocityY) { 

     // right to left 
     if(e1.getX() - e2.getX() > 10 && Math.abs(velocityX) > 20) { 
      Log.i("onFling", "right to left"); 

      return false; 

     // left to right 
     } else if (e2.getX() - e1.getX() > 10 && Math.abs(velocityX) > 20) { 
      Log.i("onFling", "left to right"); 

      return false; 
     } 

     return false; 
    } 

} 

ответ

2

Вы можете использовать GestureOverlayView увидеть previus stackoverflow post о том, как использовать его.

+1

Спасибо за подсказку GestureOverlayView. Мне потребовалось некоторое время, чтобы узнать, как его использовать -> http://www.vogella.com/articles/AndroidGestures/article.html – Paradiesstaub

+0

Рад, что я мог помочь :) – Angelo

+2

Я хотел бы знать, как это сделать, не используя GestureOverlayView. – halxinate

Смежные вопросы