[] A swipe menu for ListView.

Overview

SwipeMenuListView

Android Arsenal Download

A swipe menu for ListView.

Demo

Screenshot

Usage

Add dependency

dependencies {
    compile 'com.baoyz.swipemenulistview:library:1.3.0'
}

Step 1

  • add SwipeMenuListView in layout xml
<com.baoyz.swipemenulistview.SwipeMenuListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

Step 2

  • create a SwipeMenuCreator to add items.
SwipeMenuCreator creator = new SwipeMenuCreator() {

	@Override
	public void create(SwipeMenu menu) {
		// create "open" item
		SwipeMenuItem openItem = new SwipeMenuItem(
				getApplicationContext());
		// set item background
		openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,
				0xCE)));
		// set item width
		openItem.setWidth(dp2px(90));
		// set item title
		openItem.setTitle("Open");
		// set item title fontsize
		openItem.setTitleSize(18);
		// set item title font color
		openItem.setTitleColor(Color.WHITE);
		// add to menu
		menu.addMenuItem(openItem);

		// create "delete" item
		SwipeMenuItem deleteItem = new SwipeMenuItem(
				getApplicationContext());
		// set item background
		deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
				0x3F, 0x25)));
		// set item width
		deleteItem.setWidth(dp2px(90));
		// set a icon
		deleteItem.setIcon(R.drawable.ic_delete);
		// add to menu
		menu.addMenuItem(deleteItem);
	}
};

// set creator
listView.setMenuCreator(creator);

Step 3

  • listener item click event
listView.setOnMenuItemClickListener(new OnMenuItemClickListener() {
	@Override
	public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
		switch (index) {
		case 0:
			// open
			break;
		case 1:
			// delete
			break;
		}
		// false : close the menu; true : not close the menu
		return false;
	}
});

Swipe directions

	// Right
	mListView.setSwipeDirection(SwipeMenuListView.DIRECTION_RIGHT);
	
	// Left
	mListView.setSwipeDirection(SwipeMenuListView.DIRECTION_LEFT);

Create Different Menu

  • Use the ViewType of adapter
	class AppAdapter extends BaseAdapter {

		...
		
		@Override
		public int getViewTypeCount() {
			// menu type count
			return 2;
		}
		
		@Override
		public int getItemViewType(int position) {
			// current menu type
			return type;
		}

		...
	}
  • Create different menus depending on the view type
	SwipeMenuCreator creator = new SwipeMenuCreator() {

			@Override
			public void create(SwipeMenu menu) {
				// Create different menus depending on the view type
				switch (menu.getViewType()) {
				case 0:
					// create menu of type 0
					break;
				case 1:
					// create menu of type 1
					break;
				...
				}
			}

		};
  • Demo

Screenshot

Other

  • OnSwipeListener
listView.setOnSwipeListener(new OnSwipeListener() {
			
	@Override
	public void onSwipeStart(int position) {
		// swipe start
	}
	
	@Override
	public void onSwipeEnd(int position) {
		// swipe end
	}
});
  • open menu method for SwipeMenuListView
listView.smoothOpenMenu(position);
  • Open/Close Animation Interpolator
// Close Interpolator
listView.setCloseInterpolator(new BounceInterpolator());
// Open Interpolator
listView.setOpenInterpolator(...);

Screenshot

Comments
  • Question: Can it delete a row?

    Question: Can it delete a row?

    When the list row Swipes, and the menu appears, upon clicking on the delete button, can it remove the current row and/or remove currently displayed data item from the Adapter?

    Or Do we have to handle it manually?

    opened by rinav 5
  • Delete item not working

    Delete item not working

    I am using your SwipeMenuListView backed by a BaseAdapter which has an ArrayList. After removing an item from the ArrayList, I call notifyDataSetChanged(), and find that the View is not updating correctly. It always removes the last item, and so the items displayed are out of sync with the ArrayList.

    I verified it's not my sample code because this works fine if I use a standard ListView. In your Readme it looks like you do have delete items working, so is there a regression?

    opened by javaguy 3
  • Invalid position returned in ArrayAdapter

    Invalid position returned in ArrayAdapter

    Tested versus regular ListView and correct position was returned, but SwipeMenuListView returns invalid position.

    I have an array of 38 objects and using simple getView(int position, View convertView, ViewGroup parent) method to return a custom view.

    Here's log file to show how it works with SwipeMenuListView and regular ListView

    SwipeMenuListView - Invalid position example: 03-14 01:29:43.717 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.718 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.718 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.719 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3 03-14 01:29:43.720 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 4 03-14 01:29:43.721 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 5 03-14 01:29:43.721 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 6 03-14 01:29:43.721 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 7 03-14 01:29:43.722 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.722 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.723 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.724 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3 03-14 01:29:43.725 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 4 03-14 01:29:43.726 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 5 03-14 01:29:43.726 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 6 03-14 01:29:43.727 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 7 03-14 01:29:43.727 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.728 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.728 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.729 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3 03-14 01:29:43.729 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 4 03-14 01:29:43.731 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 5 03-14 01:29:43.731 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 6 03-14 01:29:43.731 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 7 03-14 01:29:43.732 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.732 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.733 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.733 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3 03-14 01:29:43.734 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 4 03-14 01:29:43.734 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 5 03-14 01:29:43.735 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 6 03-14 01:29:43.735 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 7 03-14 01:29:43.736 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.737 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.738 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.739 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3 03-14 01:29:43.740 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 4 03-14 01:29:43.740 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 5 03-14 01:29:43.741 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 6 03-14 01:29:43.742 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 7 03-14 01:29:43.748 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.748 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.749 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.749 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3 03-14 01:29:43.749 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 4 03-14 01:29:43.750 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.750 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.750 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.750 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3 03-14 01:29:43.751 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.751 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.751 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.752 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3 03-14 01:29:43.752 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 4 03-14 01:29:43.752 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 0 03-14 01:29:43.752 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 1 03-14 01:29:43.753 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 2 03-14 01:29:43.753 3052-3052/com.fedortsyganov.iptest I/Position﹕ -> 3

    ListView - valid position example: 03-14 02:06:58.644 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 4 03-14 02:06:58.660 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 5 03-14 02:06:58.678 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 6 03-14 02:06:58.694 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 7 03-14 02:06:58.694 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 8 03-14 02:06:58.710 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 9 03-14 02:06:58.731 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 10 03-14 02:06:58.732 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 11 03-14 02:06:58.743 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 12 03-14 02:06:58.762 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 13 03-14 02:06:58.777 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 14 03-14 02:06:58.778 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 15 03-14 02:06:58.794 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 16 03-14 02:06:58.811 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 17 03-14 02:06:58.828 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 18 03-14 02:06:58.846 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 19 03-14 02:06:58.846 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 20 03-14 02:06:58.863 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 21 03-14 02:06:58.877 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 22 03-14 02:06:58.894 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 23 03-14 02:06:58.912 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 24 03-14 02:06:58.927 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 25 03-14 02:06:58.929 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 26 03-14 02:06:58.944 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 27 03-14 02:06:58.961 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 28 03-14 02:06:58.977 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 29 03-14 02:06:58.994 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 30 03-14 02:06:59.012 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 31 03-14 02:06:59.028 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 32 03-14 02:06:59.045 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 33 03-14 02:06:59.061 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 34 03-14 02:06:59.077 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 35 03-14 02:06:59.094 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 36 03-14 02:06:59.110 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 37 03-14 02:06:59.128 4842-4842/com.fedortsyganov.iptest I/Position﹕ -> 30

    opened by Fedor-Tsyganov 2
  • Problem in Android 5.0 Lollipop

    Problem in Android 5.0 Lollipop

    at com.baoyz.swipemenulistview.SwipeMenuListView.onTouchEvent(SwipeMenuListView.java:182)

    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6563) at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4916) at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3398) at android.widget.AbsListView.startScrollIfNeeded(AbsListView.java:3326) at android.widget.AbsListView.onTouchMove(AbsListView.java:3754) at android.widget.AbsListView.onTouchEvent(AbsListView.java:3612) at com.baoyz.swipemenulistview.SwipeMenuListView.onTouchEvent(SwipeMenuListView.java:182) at android.view.View.dispatchTouchEvent(View.java:8388) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2314) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1692) at android.app.Activity.dispatchTouchEvent(Activity.java:2739) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2275) at android.view.View.dispatchPointerEvent(View.java:8578) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4021) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3887) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5701) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5675) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5646) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5791) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:143) at android.os.Looper.loop(Looper.java:122) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.

    opened by javierpe 1
  • Unnesscary code,开发过程中残留的无用的代码,测试用的代码

    Unnesscary code,开发过程中残留的无用的代码,测试用的代码

    在学习如何设计自定义控件的过程中发现的不必要的代码:

    SwipeMenuView: 没有被使用的对象:private SwipeMenuListView mListView;

    SwipeMenuAdapter: getView()中存在测试用的代码:createMenu(menu); getView()中存在没有被使用的对象:View view = mAdapter.getView(position, layout.getContentView(), parent);

    opened by DevDengChao 0
  • Can't use custom divider

    Can't use custom divider

    I tried to use custom divider in my xml file like:

    <com.baoyz.swipemenulistview.SwipeMenuListView
            android:id="@+id/listView"
            android:layout_alignParentStart="false"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignWithParentIfMissing="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="false"
            android:longClickable="false"
            android:layout_gravity="center"
            android:divider="@drawable/list_divider"/>
    

    and I defined my list_divider in drawable/list_divider but it seems not working. I also tried to change divider color and height in this way:

    <com.baoyz.swipemenulistview.SwipeMenuListView
            android:id="@+id/listView"
            android:divider="@color/colorPrimaryDark"
            android:dividerHeight="2dip"
            android:layout_alignParentStart="false"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignWithParentIfMissing="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="false"
            android:longClickable="false"
            android:layout_gravity="center" />
    

    but both still not working. It is strange since SwipeMenuListView extends Listview. Any clue?

    Thanks

    opened by AndreaScn 0
  • Is this library causing it? android.widget.AbsListView$RecycleBin.getScrapView NullPointerException: Attempt to get length of null array

    Is this library causing it? android.widget.AbsListView$RecycleBin.getScrapView NullPointerException: Attempt to get length of null array

    Please see: https://stackoverflow.com/questions/66681210/android-widget-abslistviewrecyclebin-getscrapview-nullpointerexception-attempt

    Is this being caused this library? Has anyone else experienced it?

    opened by derrickrc 0
  • isGroupSwipable is returning false but still the group is swiping

    isGroupSwipable is returning false but still the group is swiping

    I have a list view i with parent and childs . In isGroupSwipeable i have added a condition it check if it's true then it make it swipeable if not it makes it false. At first it is working fine .But when i scroll through the list from bottom to top . Then those groups become swipeable . But the crazy part about is that when i check isGroupSwipeable for that specific group position, it is returning me false and group is swiping val checkForSwipe = adapter?.isGroupSwipable(groupPostion)

    override fun isGroupSwipable(p0: Int): Boolean { var rem = debt.installments[p0].remainingAmount() if (rem > 0){ return true } else{ return false }

    }
    
    opened by DanyalNaveed 0
  • On Device Resolution change icon resizing..

    On Device Resolution change icon resizing..

    I am using on Samsung S9. When i am switching between the resolution of my device. HD(1480x720), FHD+(2220x1080),WQHD+(2960x1440) icon size of swipe menu changes automatically and create a Height issue.

    HD VIEW

    20200507_141201 FHD VIEW 20200507_141224 QHD VIEW 20200507_141306

    opened by joshisunil-1983 0
Owner
星一
Read the fucking code
星一
An Android custom ListView and ScrollView with pull to zoom-in.

PullZoomView An Android custom ListView and ScrollView with pull to zoom-in. Features Set ZoomView enable Add HeaderView Custom ZoomView Parallax or N

Frank-Zhu 2.3k Dec 26, 2022
Android ListView that mimics a GridView with asymmetric items. Supports items with row span and column span

AsymmetricGridView An Android custom ListView that implements multiple columns and variable sized elements. Please note that this is currently in a pr

Felipe Lima 1.8k Jan 7, 2023
ListView with blur/parallax/sticky capabilities

BlurStickyHeaderListView What is BlurStickyHeaderListView? It is a custom ListView with a header that displays pictures from an URL. It then adds a ni

null 129 Oct 26, 2022
A very easy-to-use and non-intrusive implement of Swipe to dismiss for RecyclerView.

RecyclerViewSwipeDismiss A very easy-to-use and non-intrusive implement of Swipe to dismiss for RecyclerView. Preview How to use Add these lines to yo

xcodebuild 431 Nov 23, 2022
*** WARNING: This library is no longer maintained *** An easy way to add a simple 'swipe-and-do-something' behavior to your `RecyclerView` items. Just like in Gmail or Inbox apps.

SwipeToAction An easy way to add a simple 'swipe-and-do-something' behavior to your RecyclerView items. Just like in Gmail or Inbox apps. Integration

Victor Calvello 223 Nov 16, 2022
[] A swipe menu for ListView.

SwipeMenuListView A swipe menu for ListView. Demo Usage Add dependency dependencies { compile 'com.baoyz.swipemenulistview:library:1.3.0' } Step 1

星一 3.5k Dec 16, 2022
[] A swipe menu for ListView.

SwipeMenuListView A swipe menu for ListView. Demo Usage Add dependency dependencies { compile 'com.baoyz.swipemenulistview:library:1.3.0' } Step 1

星一 3.5k Dec 16, 2022
Android library to display a ListView whose cells are not rigid but flabby and react to ListView scroll.

FlabbyListView This library is not maintained anymore and there will be no further releases Android library to display a ListView which cells are not

JPARDOGO 762 Nov 23, 2022
HorizontalListView is an Android ListView widget which scrolls in a horizontal manner (in contrast with the SDK-provided ListView which scrolls vertically).

HorizontalListView HorizontalListView is an Android ListView widget which scrolls in a horizontal manner (in contrast with the SDK-provided ListView w

MeetMe 722 Nov 10, 2022
Android library to display a ListView whose cells are not rigid but flabby and react to ListView scroll.

FlabbyListView This library is not maintained anymore and there will be no further releases Android library to display a ListView which cells are not

JPARDOGO 762 Nov 23, 2022
A Tinder-like Android library to create the swipe cards effect. You can swipe left or right to like or dislike the content.

Swipecards Travis master: A Tinder-like cards effect as of August 2014. You can swipe left or right to like or dislike the content. The library create

Dionysis Lorentzos 2.3k Dec 9, 2022
An Android Library that allows users to pull down a menu and select different actions. It can be implemented inside ScrollView, GridView, ListView.

AndroidPullMenu AndroidPullMenu is an Open Source Android library that allows developers to easily create applications with pull menu. The aim of this

Armando TBA 181 Nov 29, 2022
Floating Action Menu for Android. Inspired by the Google Plus floating menu

android-floating-action-menu Floating Action Menu for Android. Inspired by the Google Plus floating menu. Demo Setup The simplest way to use this libr

Alessandro Crugnola 242 Nov 10, 2022
🚀 A very customizable library that allows you to present menu items (from menu resource and/or other sources) to users as a bottom sheet.

SlidingUpMenu A library that allows you to present menu items (from menu resource and/or other sources) to users as a bottom sheet. Gradle Dependency

Rasheed Sulayman 26 Jul 17, 2022
Classic Power Menu is a Power Menu Replacement for Android 11+

Classic Power Menu is a Power Menu Replacement for Android 11+, with the main aim being restoring power menu options (Device Controls & Quick Access Wallet) on Android 12.

Kieron Quinn 385 Dec 31, 2022
An Android custom ListView and ScrollView with pull to zoom-in.

PullZoomView An Android custom ListView and ScrollView with pull to zoom-in. Features Set ZoomView enable Add HeaderView Custom ZoomView Parallax or N

Frank-Zhu 2.3k Dec 26, 2022
Android ListView that mimics a GridView with asymmetric items. Supports items with row span and column span

AsymmetricGridView An Android custom ListView that implements multiple columns and variable sized elements. Please note that this is currently in a pr

Felipe Lima 1.8k Jan 7, 2023
ListView with blur/parallax/sticky capabilities

BlurStickyHeaderListView What is BlurStickyHeaderListView? It is a custom ListView with a header that displays pictures from an URL. It then adds a ni

null 129 Oct 26, 2022
This project aims to provide a working page flip implementation for usage in ListView.

Changes: Made clickable views like a button clickable inside the FlipViewPager. Use RecyclerView. Updated to API 23. Added support for close clicks on

Yalantis 1.8k Dec 13, 2022