I have listview with some text. I want to show images on swipe action (almost like in gmail app). For example, if I swipe from left to right - my list item is moving right, and image is sliding from the left. My list item can move right no more than image width. After swipe stops, list item is moving to start position. How could I make such thing?
3 回答
看看这个。
在那里您可以看到列表视图向右滑动以显示视图。
折断:
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>
我找不到任何可以做到这一点的库,但自己制作并不难。正如尼克指出的那样,看看android-swipetodismiss,看看SwipeDismissListViewTouchListener.java。
View
首先,您必须为您ListView
的孩子创建一个自定义。您将需要一个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)
并再次覆盖图像。这只是一个指南,有一些细节没有涉及,但你应该能够从这个开始。
您可以使用手势检测器的 onFling() 事件。它将为您提供运动事件点和触摸速度点,您可以使用它们来识别手势并可以使用从左到右和从右到左的动画加载视图。