Android listview, проведите по экрану

У меня есть listview с некоторым текстом. Я хочу показать изображения при работе с swipe (почти как в приложении gmail). Например, если я прокручиваю слева направо - мой элемент списка движется вправо, а изображение сдвигается слева. Элемент моего списка может перемещаться вправо не больше, чем ширина изображения. После остановки салфетки элемент списка перемещается в исходное положение. Как я могу это сделать? example

Ответы

Ответ 1

просмотрите this.

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

Привязать:

enter image description here

main_activity.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:swipe="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

   <com.fortysevendeg.swipelistview.SwipeListView
            android:id="@+id/example_swipe_lv_list"
            android:listSelector="#00000000"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            swipe:swipeFrontView="@+id/front"
            swipe:swipeBackView="@+id/back"
            swipe:swipeDrawableChecked="@drawable/choice_selected"
            swipe:swipeDrawableUnchecked="@drawable/choice_unselected"
            swipe:swipeCloseAllItemsWhenMoveList="true"
            swipe:swipeMode="both"
            />

</LinearLayout>

Ответ 2

вы можете использовать onFling() событие gesturedetector. он даст вам точки движения и точки скорости касания, используя то, что вы можете идентифицировать жест и можете загружать представление с помощью анимаций, как слева направо, так и справа налево.

Ответ 3

Я не мог найти библиотеку, которая делает именно это, но сделать это не сложно. Как заметил Ник, посмотрите android-swipetodismiss, посмотрите SwipeDismissListViewTouchListener.java.

Сначала вы должны создать пользовательский View для вас ListView child. Вам понадобится ImageView, который перекрывается другим View, который содержит текст.

Затем вы добавляете слушателя onTouch() к вашему ListView. На MotionEvent.ACTION_DOWN (когда вы начинаете жест) вы берете сенсорные координаты и вычисляете, какой ребенок в ListView вы касаетесь, например:

        int[] listViewCoords = new int[2];
        mListView.getLocationOnScreen(listViewCoords);
        int x = (int) motionEvent.getRawX() - listViewCoords[0];
        int y = (int) motionEvent.getRawY() - listViewCoords[1];
        View child;
        for (int i = 0; i < childCount; i++) {
            child = mListView.getChildAt(i);
            child.getHitRect(rect);
            if (rect.contains(x, y)) {
                mDownView = child;
                break;
            }
        }

В MotionEvent.ACTION_MOVE вы измеряете разницу в координатах X между точкой, к которой вы коснулись MotionEvent.ACTION_DOWN, и текущей координатой:

float deltaX = motionEvent.getRawX() - mDownX;

Итак, вы перевели View, который содержит текст, чтобы выявить ImageView:

mDownView.setTranslationX(deltaX);

Когда вы поднимаете палец, вы просто устанавливаете mDownView .setTranslationX(0), и изображение снова закрывается. Это всего лишь руководство, есть некоторые детали, которые не охвачены, но вы можете начать с этого.