Cómo configurar onFling () evento de Gesture en ScrollView en android?
He establecido el evento onFling()
de Gesture en ScrollView
, pero no está funcionando en ScrollView,
package com.doubletap; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.OnDoubleTapListener; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.widget.TextView; public class DoubleTapActivity extends Activity implements OnGestureListener { private GestureDetector gd; private TextView tvTap; String TAG = getClass().getSimpleName(); private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = 200; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tvTap = (TextView)findViewById(R.id.tvTap); gd = new GestureDetector(this); gd.setOnDoubleTapListener(new OnDoubleTapListener() { @Override public boolean onDoubleTap(MotionEvent e) { return false; } @Override public boolean onDoubleTapEvent(MotionEvent e) { return false; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { return false; } }); } @Override public boolean onTouchEvent(MotionEvent event) { return gd.onTouchEvent(event);//return the double tap events } @Override public boolean onDown(MotionEvent e) { return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { return false; } if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { tvTap.setText("Flip Right to Left"); Log.v(TAG, "Right to Left"); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { tvTap.setText("Flip Left to Right"); Log.v(TAG, "Left to Right"); } } catch (Exception e) { } return false; } @Override public void onLongPress(MotionEvent e) { } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } @Override public void onShowPress(MotionEvent e) { } @Override public boolean onSingleTapUp(MotionEvent e) { return false; } }
Main.xml
- Agregar un encabezado a un GridView (Android)
- Android: Detectando cuando ScrollView Hits Bottom
- Cómo desplazarse tableview en android
- Desplazamiento con varios ListViews para Android
- DialogFragment sin título - ScrollView no se desplaza
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/hello" android:textStyle="bold" /> <TextView android:id="@+id/tvTap" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dip" > </TextView> <TextView android:id="@+id/tvTapEvent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" > </TextView> <ScrollView android:id="@+id/scroll" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button1" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button2" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button3" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button4" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button5" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button6" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button7" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button8" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button9" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button10" /> </LinearLayout> </ScrollView>
¿Alguien sabe cómo implementar el evento onFling () en Scrollview?
- Cómo cambiar el tamaño de Android ScrollView
- Mover EditText en NestedScrollView cuando aparece el teclado virtual
- distinguir un golpe y hacer clic en android (pasar el evento a otra vista si es un golpe)
- Custom ViewPager dentro de ObservableScrollView no se mide correctamente la altura
- Desplácese hacia arriba ScrollView lentamente
- Android ScrollView y los botones en la parte inferior de la pantalla
- ¿Podemos usar un ScrollView dentro de un LinearLayout?
- Uso de ImageView para una vista panorámica
Esto funciona para mí. Esperemos que pueda agregar sus acciones de doble toque aquí.
public class ScrollViewFling extends Activity { private GestureDetector mGesture; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.scrollviewfling); mGesture = new GestureDetector(this, mOnGesture); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { boolean handled = super.dispatchTouchEvent(ev); handled = mGesture.onTouchEvent(ev); return handled; } private OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDown(MotionEvent e) { return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.v("fling", "Flinged."); return true; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } }; };