Intereting Posts
ViewPager внутри фрагмента теряет содержимое при возврате к нему Ошибка: не удалось запустить SDK-инструмент mksdcard Как запустить команду терминала в приложении Android? Android. Является ли шаблон ViewHolder автоматически реализованным в CursorAdapter? Минимизируйте приложение, когда нажимаете кнопку «Назад». UI не обновился после первого переключения скользящего меню на Android 5.0 леденец Прокрутка не работает для нескольких RecyclerView в BottomSheet Отключить прокрутку во всех мобильных устройствах Как получить объект из списка в setOnItemClickListener в android? Просмотр фрагмента доступа из Activity's onCreate Проектирование EditText с закругленными углами и внутренней тенью Android Studio, измените цвет фона редактора (не вся тема) Селектор списка элементов GridView для нескольких элементов, не работающих в Android IScroll 4 работает неправильно .bashrc неправильно читает путь среды с пробелами

Просмотр списка Android Вправо / влево, как журналы вызовов

У меня есть приложение для Android, в котором есть List View Like this

Введите описание изображения здесь

Теперь я хочу выполнить два разных действия по правильному / левому экрану элементов списка таким же образом. Как работает собственный журнал вызовов

Правильный прокрутка списка

Введите описание изображения здесь

Я хочу, чтобы этот тип проверок. Может ли кто-нибудь знать, как это сделать. В основном я хочу реализовать SimpleOnGestureListener .

Я прочитал сообщение, на которое ответил sir gav Fling gesture обнаружение на макете сетки, и после этого мне удастся реализовать обнаружение левого салфетки и правильного салфетки, но единственное, чего я не получаю, в том, какой элемент списка произошел.

Обновление 24 мая 2013 г.

Теперь я могу обнаружить действие салфетки с помощью этого кода –

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

Теперь используйте его с ListView таким образом

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

В вашем setOnItemClickListener вы можете обнаружить такие события, как эти

 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(); } } } }); 

Но все же я не могу оживить салфетки, подобные этим

Введите описание изображения здесь

Пожалуйста, помогите мне.

Solutions Collecting From Web of "Просмотр списка Android Вправо / влево, как журналы вызовов"

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() {} } 

ПРИМЕНЕНИЕ:

 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(); } }); 

Вы можете использовать Фрагменты для этого требования. Используйте FragmentPagerAdapter и переопределите getItem (int position), который вернет вам фрагмент. Установите адаптер в viewPager и в setOnPageChangeListener вы можете иметь логику для вызова другого фрагмента.

Shrishail