tutorial studio examples changes animations animate android android-layout listview android-animation swipe

studio - animations in android examples



Vista de lista de Android deslizamientos hacia la derecha/izquierda, como registros de llamadas (2)

Tengo una aplicación de Android en la que hay una vista de lista como esta

Ahora quiero realizar dos actividades diferentes en deslizamiento hacia la derecha / izquierda de los elementos de la lista de la misma forma en que funciona el registro de llamadas nativas

Deslizamiento hacia la derecha de la lista

Quiero este tipo de golpes. ¿Alguien puede saber cómo hacerlo realidad? Básicamente quiero implementar SimpleOnGestureListener .

He leído una publicación respondida por sir gav Fling detección de gestos en el diseño de la cuadrícula y después he tenido éxito en la implementación del deslizamiento hacia la izquierda y la detección de deslizamiento hacia la derecha, pero lo único que no entiendo es en qué elemento de lista se ha producido el deslizamiento.

Actualización 24 de mayo de 2013

Ahora puedo detectar la acción de deslizamiento usando este código:

SwipeDetector.java

/** * Class swipe detection to View */ public class SwipeDetector implements View.OnTouchListener { public static enum Action { LR, // Left to right RL, // Right to left TB, // Top to bottom BT, // Bottom to top None // Action not found } private static final int HORIZONTAL_MIN_DISTANCE = 30; // The minimum // distance for // horizontal swipe private static final int VERTICAL_MIN_DISTANCE = 80; // The minimum distance // for vertical // swipe private float downX, downY, upX, upY; // Coordinates private Action mSwipeDetected = Action.None; // Last action public boolean swipeDetected() { return mSwipeDetected != Action.None; } public Action getAction() { return mSwipeDetected; } /** * Swipe detection */@Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { downX = event.getX(); downY = event.getY(); mSwipeDetected = Action.None; return false; // allow other events like Click to be processed } case MotionEvent.ACTION_MOVE: { upX = event.getX(); upY = event.getY(); float deltaX = downX - upX; float deltaY = downY - upY; // horizontal swipe detection if (Math.abs(deltaX) > HORIZONTAL_MIN_DISTANCE) { // left or right if (deltaX < 0) { mSwipeDetected = Action.LR; return true; } if (deltaX > 0) { mSwipeDetected = Action.RL; return true; } } else // vertical swipe detection if (Math.abs(deltaY) > VERTICAL_MIN_DISTANCE) { // top or down if (deltaY < 0) { mSwipeDetected = Action.TB; return false; } if (deltaY > 0) { mSwipeDetected = Action.BT; return false; } } return true; } } return false; } }

Ahora úsalo con tu ListView de esta manera

// Set the touch listener final SwipeDetector swipeDetector = new SwipeDetector(); lv.setOnTouchListener(swipeDetector);

En su setOnItemClickListener puede detectar los eventos de deslizamiento como estos

lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView <? > parent, View view, int position, long id) { if (swipeDetector.swipeDetected()) { if (swipeDetector.getAction() == SwipeDetector.Action.LR) { Toast.makeText(getApplicationContext(), "Left to right", Toast.LENGTH_SHORT).show(); } if (swipeDetector.getAction() == SwipeDetector.Action.RL) { Toast.makeText(getApplicationContext(), "Right to left", Toast.LENGTH_SHORT).show(); } } } });

Pero todavía no puedo animar el deslizamiento como estos:


OnSwipeTouchListener.java:

import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public class OnSwipeTouchListener implements OnTouchListener { private final GestureDetector gestureDetector = new GestureDetector(new GestureListener()); public boolean onTouch(final View view, final MotionEvent motionEvent) { super.onTouch(view, motionEvent); return gestureDetector.onTouchEvent(motionEvent); } private final class GestureListener extends SimpleOnGestureListener { private static final int SWIPE_THRESHOLD = 100; private static final int SWIPE_VELOCITY_THRESHOLD = 100; @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { boolean result = false; try { float diffY = e2.getY() - e1.getY(); float diffX = e2.getX() - e1.getX(); if (Math.abs(diffX) > Math.abs(diffY)) { if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (diffX > 0) { onSwipeRight(); } else { onSwipeLeft(); } } } else { if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { if (diffY > 0) { onSwipeBottom(); } else { onSwipeTop(); } } } } catch (Exception exception) { exception.printStackTrace(); } return result; } } public void onSwipeRight() {} public void onSwipeLeft() {} public void onSwipeTop() {} public void onSwipeBottom() {} }

USO:

imageView.setOnTouchListener(new OnSwipeTouchListener() { public void onSwipeTop() { Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show(); } public void onSwipeRight() { Toast.makeText(MyActivity.this, "right", Toast.LENGTH_SHORT).show(); } public void onSwipeLeft() { Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show(); } public void onSwipeBottom() { Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show(); } });


puedes usar Fragmentos para este requisito. Utilice FragmentPagerAdapter y overide getItem (int position) que le devolverá el fragmento. configura el adaptador para viewPager y en el setOnPageChangeListener puedes tener la lógica para llamar a diferentes fragmentos.

Shrishail