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)
, и изображение снова закрывается. Это всего лишь руководство, есть некоторые детали, которые не охвачены, но вы можете начать с этого.