Android library to achieve in an easy way, the behaviour of the home page in the Expedia app, with a pair of auto-scroll circular parallax ListViews.

Overview

ListBuddies

This library is not maintained anymore and there will be no further releases

Android library of a pair of auto-scroll circular parallax ListViews like the ones on the expedia app home page.

A video example of this library is on this youtube video.

I would appreciate any kind of help to improve this library. Thanks

Usage

You must declare the following view in your xml layout:

<com.jpardogo.listbuddies.lib.views.ListBuddiesLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listbuddies"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

There are a bunch of optional custom attributes:

<com.jpardogo.listbuddies.lib.views.ListBuddiesLayout
        xmlns:listbuddies="http://schemas.android.com/apk/res-auto"
        android:id="@+id/listbuddies"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        listbuddies:speed="2"
        listbuddies:gap="@dimen/gap"
        listbuddies:gapColor="@color/frame"
        listbuddies:listsDivider="@drawable/divider"
        listbuddies:listsDividerHeight="@dimen/divider_height"
        listbuddies:autoScrollFaster="right"
        listbuddies:scrollFaster="left"/>

If you prefere to create it dynamically use:

    
    ListBuddiesLayout listBuddies = new ListBuddiesLayout(this);
    listBuddies.setGap(mMarginDefault)
                .setSpeed(ListBuddiesLayout.DEFAULT_SPEED)
                .setDividerHeight(mMarginDefault)
                .setGapColor(getResources().getColor(R.color.frame))
                .setAutoScrollFaster(mScrollConfig[ScrollConfigOptions.RIGHT.getConfigValue()])
                .setManualScrollFaster(mScrollConfig[ScrollConfigOptions.LEFT.getConfigValue()])
                .setDivider(getResources().getDrawable(R.drawable.divider));
    ((FrameLayout)findViewById(R.id.<container_id>)).addView(listBuddies)

######Attributes

  • speed: Sets the auto scroll speed (integer). 0 - no autoScroll
  • gap: Space between the lists, the default gap is 3dp (@dimen/default_margin_between_lists).
  • gapColor: Defines the color of the gap, if it is not set the gap is transparent
  • listDivider: Defines the lists dividers.
  • listsDividerHeight: Divider´s height.
  • autoScrollFaster: Indicate the ListView that will be faster on the parrallax effect during autoScroll. right/left.
  • scrollFaster: Indicate the ListView that will be faster on the parrallax effect during manual scroll. right/left.

This LinearLayout contains two ListViews. So we need to set the adapters of the ListViews calling listBuddies.setAdapters(adapter1,adapter2).

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        ListBuddiesLayout listBuddies = (ListBuddiesLayout) rootView.findViewById(R.id.listbuddies);
        CircularAdapter adapter = new CircularAdapter(getActivity(), getResources().getDimensionPixelSize(R.dimen.image_size1), ImagesUrls.imageUrls_left);
        CircularAdapter adapter2 = new CircularAdapter(getActivity(), getResources().getDimensionPixelSize(R.dimen.image_size2), ImagesUrls.imageUrls_right);
        listBuddies.setAdapters(adapter, adapter2);
        return rootView;
    }

Both adapters need to be extend from CircularLoopAdapter. With minimal differences from a BaseAdapter.

    public class CircularAdapter extends CircularLoopAdapter

The first different is that the adapter needs to @Override getCircularCount instead of getCount.

    @Override
    protected int getCircularCount() {
        return mItems.size();
    }

and instead of get the value of position to get the item from the list. We need to get the position calling getCircularPosition(position), like this:

    @Override
    public String getItem(int position) {
        return mItems.get(getCircularPosition(position));
    }

To receive the callback for the click on the items of the lists, Just call setOnItemClickListener on your ListBuddiesLayout view and pass and instance of OnBuddyItemClickListener.

public class ListBuddiesFragment extends Fragment implements ListBuddiesLayout.OnBuddyItemClickListener

....

listBuddies.setOnItemClickListener(this);

You will receive the OnItemClick callback in onBuddyItemClicked which is similar to onItemClick but indicate with the parameter int buddy in which of the lists the item clicked is contained. if the value of buddy is 0 the item is on the first list (left) and if it is 1 is on the second list (right).

@Override
    public void onBuddyItemClicked(AdapterView<?> parent, View view, int buddy, int position, long id) {
          //int buddy indicate the list where the item is contain.
          // 0 - left
          // 1 - right
    }

In order to receive touch feedback for the click of the list items, we need to have as a parent of our list item view one of the following layouts:

com.jpardogo.listbuddies.lib.views.containers.FrameLayoutFeedback com.jpardogo.listbuddies.lib.views.containers.RelativeLayoutFeedBack com.jpardogo.listbuddies.lib.views.containers.LinearLayoutFeedBack

This layouts have selectorColor property to define the color of the selector for the feedback.

<com.jpardogo.listbuddies.lib.views.containers.FrameLayoutFeedback 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:listbuddies="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    listbuddies:selectorColor="@color/blue">
    
    .....

The color will need some transparency in order to act as the ListView selector:

<color name="blue">#7733B5E5</color>

Although it is just optional.

Including in your project

You can either add the library to your application as a library project or add the following dependency to your build.gradle:

Maven Central

dependencies {
    compile 'com.jpardogo.listbuddies:library:(latest version)'
}

Developed By

Javier Pardo de Santayana Gómez - [email protected]

Follow me on Twitter Follow me on Google+ Follow me on LinkedIn

License

Copyright 2013 Javier Pardo de Santayana Gómez

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • how to implement ListBuddies library

    how to implement ListBuddies library

    I had clone your repository Then I add your library as library project ( like you are sad ) then run your demo app in example folder [ MainActivity ] app Crashing and give this Exception:

    java.lang.RuntimeException: Unable to instantiate application com.jpardogo.android.listbuddies.ListBuddies: java.lang.ClassNotFoundException: Didn't find class "com.jpardogo.android.listbuddies.ListBuddies" on path: DexPathList[[zip file "/data/app/com.jpardogo.android.listbuddies-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.jpardogo.android.listbuddies-1, /vendor/lib, /system/lib]]
    

    I will appreciated if you give Steps to implement you Library ? and how to run demo example ? Is There any Jar file for you library ? Why you putting your code into java Folder not into src Folder ?

    opened by ahmed-hamdy90 2
  • CircularLoopAdapter returning wrong position

    CircularLoopAdapter returning wrong position

    Here is my scenerio,

    In the example the constructor for CircularAdapter takes in an array of image url's, when my fragment first starts there is nothing in those lists because of client/server syncing

    When my sync gets done I use a Loader to pull everything from my database and in the loaders onLoadFinished I loop through the cursor and load 2 different ArrayLists

    images.clear();
    images2.clear();
    do{
        S3Image image = new S3Image(cursor);
        if(cursor.getPosition() < cursor.getCount()/2){
            images.add(image);
        }else{
            images2.add(image);
        }
    
     }while(cursor.moveToNext());
     adapter.notifyDataSetChanged();
     adapter2.notifyDataSetChanged();`
    

    the images get put into the correct lists but when I call notifyDatasetChanged()

    the first position I get is 0 then the next position is 1073741825 which I believe is the Integer.MAX_VALUE value in CircularLoopAdapter from bug fix #4 so clearly that throws an out of bounds exception.

    I thought about just creating a new adapter everytime in the loaders onLoadFinighed but I need to have a callback in the adapters for when something is clicked (no I dont mean the listview item itself, i mean like a button in the cell is clicked) so that is not a possibility either.

    I am sure the issue is due to me loading the images after I already created an instance of the CircularLoopAdapter but I dont see anyway around it

    opened by tyczj 2
  • the demo .when set speed to 0. scrolling error

    the demo .when set speed to 0. scrolling error

    the demo app .when set speed to 0. scrolling. then crash

    my phone is htc one . Android 4.4.2

    the log:

    E/AndroidRuntime(16697): FATAL EXCEPTION: main
    E/AndroidRuntime(16697): Process: com.jpardogo.android.listbuddies, PID: 16697
    E/AndroidRuntime(16697): java.lang.NullPointerException
    E/AndroidRuntime(16697):        at com.jpardogo.listbuddies.lib.views.ListBuddiesLayout.performClick(ListBuddiesLayout.java:396)
    E/AndroidRuntime(16697):        at com.jpardogo.listbuddies.lib.views.ListBuddiesLayout.actionUp(ListBuddiesLayout.java:375)
    E/AndroidRuntime(16697):        at com.jpardogo.listbuddies.lib.views.ListBuddiesLayout.onTouch(ListBuddiesLayout.java:299)
    E/AndroidRuntime(16697):        at android.view.View.dispatchTouchEvent(View.java:7784)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
    E/AndroidRuntime(16697):        at android.widget.AbsListView.dispatchTouchEvent(AbsListView.java:7569)
    E/AndroidRuntime(16697):        at android.widget.ListView.dispatchTouchEvent(ListView.java:4494)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    E/AndroidRuntime(16697):        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    E/AndroidRuntime(16697):        at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2169)
    E/AndroidRuntime(16697):        at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1613)
    E/AndroidRuntime(16697):        at android.app.Activity.dispatchTouchEvent(Activity.java:2539)
    E/AndroidRuntime(16697):        at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:260)
    E/AndroidRuntime(16697):        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2117)
    E/AndroidRuntime(16697):        at android.view.View.dispatchPointerEvent(View.java:8005)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4274)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4153)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3688)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3738)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3707)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3818)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3715)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3875)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3688)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3738)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3707)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3715)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3688)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5947)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5920)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5883)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6031)
    E/AndroidRuntime(16697):        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:214)
    E/AndroidRuntime(16697):        at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
    E/AndroidRuntime(16697):        at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:200)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6002)
    E/AndroidRuntime(16697):        at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6060)
    E/AndroidRuntime(16697):        at android.
    E/ActivityManager(  839): App crashed! Process: com.jpardogo.android.listbuddies
    
    
    opened by xianyo 2
  • list scrolling issue

    list scrolling issue

    i found listscrolling has multitouch issue that can overcome by specifiying android:splitMotionEvents="false" in ListBuddiesLayout in xml and i have encountered one more issue when right listview is manually scrolling fast , on during scroll state SCROLL_STATE_FLING when we tap the left listview,auto scroolling is stopped some times ..plz resolve this issue

    bug 
    opened by santhosh3614 2
  • Multi Selection Not Available

    Multi Selection Not Available

    Awesome library thanks to developer but multi selection (multi choice mode) not available for performing multiple query like delete multi items bla bla bla...please make it possible

    opened by ashishoc 1
  • Very hard to implement...

    Very hard to implement...

    Thanks for that great library but thats very hard to implement library...

    I can not figure out how can I customize that code... I imported the library project,then I stucked.. I also examine your example project(What a clear code mate,I really impressed). And I said I can't customize your example project.(Cause of I am newbie :( )

    I want to use that library as listview but when an user clicked one image,I used my own ImageView Activity.Actually another page viewer activity. (https://github.com/pakerfeldt/android-viewflow) Can you help me about that merge issue? How can I merge that 2 library in 1 project? When I tried to merge,there is lots of listadapter... I confused. Thank you for answer... Greeting.

    opened by anileger 1
  • getView

    getView

    the newest version do not execute getView() function?

    mAdapterLeft = new CircularAdapter(getActivity(), getResources().getDimensionPixelSize(R.dimen.item_height_small), ImagesUrls.imageUrls_left); mAdapterRight = new CircularAdapter(getActivity(), getResources().getDimensionPixelSize(R.dimen.item_height_tall), ImagesUrls.imageUrls_right); mListBuddies.setAdapters(mAdapterLeft, mAdapterRight);

    opened by r17171709 1
  • block on tablet

    block on tablet

    hi, it is ok when i use your project run on a phone, but it block running on a tablet. I don't know if only I met this kind of situation , what should i do ?

    opened by sunyuyangg555 0
  • Multitouch action stop ListViews

    Multitouch action stop ListViews

    Issues split from issue #3 ListView scrolling has multitouch issue that can be overcome by specifying android:splitMotionEvents="false" or setMotionEventSplittingEnabled(false) in ListBuddiesLayout

    bug 
    opened by jpardogo 0
  • When in a fragment, inside a ViewPager, scrolling it offscreen stops scrolling.

    When in a fragment, inside a ViewPager, scrolling it offscreen stops scrolling.

    My ListBuddies view is in a fragment that is inside a ViewPager that is set to never clear out any of its views.

    When I first scroll the ListBuddies fragment in to view, it is autoscrolling.

    When I scroll off of that view, and then back, autoscrolling has stopped, until I manually scroll once again. Any ideas why?

    opened by CHPraxis 1
  • Something is not right here

    Something is not right here

    s51122-185256 here is the log : : getView: image width = 670 : getView: image height = 670 : getView: imageButton width = 397 : getView: imageButton height = 1088

    this is my ImageButton

    So, may you tell me what should I do?

    opened by HyperSimon 0
  • Memory Issue Samsung devices

    Memory Issue Samsung devices

    I have an issue on samsung devices, i get the this error when start using the library and this only happens on S4 and S3, i have tested on Nexus 4 and Xperia L1 without this error?

    could you help me please!!

    08-27 13:11:48.045: E/dalvikvm-heap(21470): Out of memory on a 1684-byte allocation. 08-27 13:11:48.050: I/dalvikvm(21470): "main" prio=5 tid=1 RUNNABLE 08-27 13:11:48.050: I/dalvikvm(21470): | group="main" sCount=0 dsCount=0 obj=0x41d20578 self=0x41c456a8 08-27 13:11:48.050: I/dalvikvm(21470): | sysTid=21470 nice=0 sched=0/0 cgrp=apps handle=1074466812 08-27 13:11:48.050: I/dalvikvm(21470): | state=R schedstat=( 37714548370 2517839095 71736 ) utm=3554 stm=216 core=3 08-27 13:11:48.050: I/dalvikvm(21470): at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:~94) 08-27 13:11:48.050: I/dalvikvm(21470): at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:124) 08-27 13:11:48.050: I/dalvikvm(21470): at java.lang.StringBuffer.append(StringBuffer.java:278) 08-27 13:11:48.050: I/dalvikvm(21470): at java.io.StringWriter.write(StringWriter.java:123) 08-27 13:11:48.050: I/dalvikvm(21470): at java.io.PrintWriter.doWrite(PrintWriter.java:623) 08-27 13:11:48.050: I/dalvikvm(21470): at java.io.PrintWriter.write(PrintWriter.java:601) 08-27 13:11:48.050: I/dalvikvm(21470): at java.io.PrintWriter.write(PrintWriter.java:579) 08-27 13:11:48.050: I/dalvikvm(21470): at java.io.PrintWriter.write(PrintWriter.java:660) 08-27 13:11:48.050: I/dalvikvm(21470): at java.io.PrintWriter.append(PrintWriter.java:722) 08-27 13:11:48.050: I/dalvikvm(21470): at java.io.PrintWriter.append(PrintWriter.java:691) 08-27 13:11:48.050: I/dalvikvm(21470): at java.io.PrintWriter.append(PrintWriter.java:31) 08-27 13:11:48.050: I/dalvikvm(21470): at java.lang.Throwable.printStackTrace(Throwable.java:330) 08-27 13:11:48.050: I/dalvikvm(21470): at java.lang.Throwable.printStackTrace(Throwable.java:306) 08-27 13:11:48.050: I/dalvikvm(21470): at android.util.Log.getStackTraceString(Log.java:400) 08-27 13:11:48.050: I/dalvikvm(21470): at android.util.Slog.e(Slog.java:151) 08-27 13:11:48.050: I/dalvikvm(21470): at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:142) 08-27 13:11:48.050: I/dalvikvm(21470): at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) 08-27 13:11:48.050: I/dalvikvm(21470): at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) 08-27 13:11:48.050: I/dalvikvm(21470): at dalvik.system.NativeStart.main(Native Method) 08-27 13:11:48.050: I/Process(21470): Sending signal. PID: 21470 SIG: 9

    opened by antoniomadrigal10 4
  • Tap during right ListView scroll scroolling is stopped some times

    Tap during right ListView scroll scroolling is stopped some times

    Issues split from issue #3 When right ListView is manually scrolling fast , on during scroll state SCROLL_STATE_FLING when we double tap the left ListView, auto scrolling is stopped some times.

    bug 
    opened by jpardogo 0
Owner
JPARDOGO
Android language writer and translator. Twitter: @jpardogo
JPARDOGO
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
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
Android library to observe scroll events on scrollable views.

Android-ObservableScrollView Android library to observe scroll events on scrollable views. It's easy to interact with the Toolbar introduced in Androi

Soichiro Kashima 9.6k Dec 29, 2022
An Android GridView that can be configured to scroll horizontally or vertically

TwoWayGridView An Android GridView that can be configured to scroll horizontally or vertically. I should have posted this over a year and a half ago,

Jess Anders 656 Jan 9, 2023
Scroll + discover = DiscrollView

Discrollview Regularly, I am pleasantly surprised by websites using a pattern I called the discrollver pattern. I'm sure you already know what I'm tal

Flavien Laurent 1.5k Dec 29, 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
Android library providing simple way to control divider items (ItemDecoration) of RecyclerView

RecyclerView-FlexibleDivider Android library providing simple way to control divider items of RecyclerView Release Note [Release Note] (https://github

Yoshihito Ikeda 2.4k Dec 18, 2022
Kotlin way of building RecyclerView Adapter 🧩. You do not have to write RecyclerView Adapters again and again and suffer from handling of different view types. Kiel will help you.

Kiel Kiel is a RecyclerView.Adapter with a minimalistic and convenient Kotlin DSL which provides utility on top of Android's normal RecyclerView.Adapt

ibrahim yilmaz 370 Jan 2, 2023
Dividers is a simple Android library to create easy separators for your RecyclerViews

Dividers Dividers is an Android library to easily create separators for your RecyclerViews. It supports a wide range of dividers from simple ones, tha

Karumi 490 Dec 28, 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
👇 Easy Google Photos style multi-selection for RecyclerViews, powered by Kotlin and AndroidX.

Drag Select Recycler View This library allows you to implement Google Photos style multi-selection in your apps! You start by long pressing an item in

Aidan Follestad 1.9k Dec 7, 2022
RecyclerView extension library which provides advanced features. (ex. Google's Inbox app like swiping, Play Music app like drag and drop sorting)

Advanced RecyclerView This RecyclerView extension library provides Google's Inbox app like swiping, Play Music app like drag-and-drop sorting and expa

Haruki Hasegawa 5.2k Dec 23, 2022
. Android library that integrate sticky section headers in your RecyclerView

recyclerview-stickyheaders Recyclerview-stickyheaders is an Android library that makes it easy to integrate section headers in your RecyclerView. Thes

null 968 Nov 10, 2022
An android library for section headers that stick to the top

StickyListHeaders StickyListHeaders is an Android library that makes it easy to integrate section headers in your ListView. These section headers stic

Emil Sjölander 5.5k Jan 2, 2023
An Android Animation library which easily add itemanimator to RecyclerView items.

RecyclerView Animators RecyclerView Animators is an Android library that allows developers to easily create RecyclerView with animations. Please feel

Daichi Furiya 11.2k Jan 5, 2023
Android library defining adapter classes of RecyclerView to manage multiple view types

RecyclerView-MultipleViewTypeAdapter RecyclerView adapter classes for managing multiple view types Release Note [Release Note] (https://github.com/yqr

Yoshihito Ikeda 414 Nov 21, 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
Drag and drop GridView for Android

DynamicGrid Drag and drop GridView for Android. Depricated It's much better to use solutions based on recycler view. For example https://github.com/h6

Alex Askerov 920 Dec 2, 2022