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
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 30, 2022
A small android library for tagging views inside a ScrollView as "sticky" making them stick to the top of the scroll container until a new sticky view comes and takes it's place

StickyScrollViewItems StickyScrollViewItems is a ScrollView subclass that allowed you to mark items inside the ScrollView as sticky. The items marked

Emil Sjölander 1k Jan 7, 2023
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
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
An easy to use Drag & Drop List for Android. Direct replacement of the android ListView.

DragNDropListView DragNDropListView is a direct replacement for the stock Android ListView. If you know how to use ListView, you already know how to u

null 187 Dec 22, 2022
Easy to use ListView with pinned sections for Android.

Easy to use ListView with pinned sections for Android 2.1 and higher. Pinned section is a header view which sticks to the top of the list until at lea

Sergej Shafarenka 2.6k Dec 21, 2022
Expandable Recyclerview makes it easy to integrate nested recycler view...🔨 📝

SSExpandableRecyclerView Expandable Recyclerview make it easy to integrate nested recyclerview Features Simple and easy to use ( no complex adapter re

Simform Solutions 52 Nov 1, 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 5, 2023
This is a very simple library for Android that allows you to stick an header to a scrollable view and easily apply animation to it

StikkyHeader This is a very simple library for Android that allows you to stick an header to a ListView and easily apply animation to it Usage To use

Carlo Marinangeli 847 Dec 30, 2022
Android library that allows you to bind a LinearLayout with a ListAdapter.

LinearListView Android library that allows you to bind a LinearLayout with a ListAdapter. Download Gradle: dependencies { compile 'com.github.franki

Francesco Sardo 571 Dec 22, 2022
An open source Android library that provides a floating group view at the top of the ExpandableListView

FloatingGroupExpandableListView FloatingGroupExpandableListView is a huge name an open source Android library that provides a floating group view (aka

Diego Lima 376 Nov 28, 2022
This project aims to provide a reusable pull to refresh widget for Android.

Pull To Refresh for Android Note This library is deprecated, a swipe refresh layout is available in the v4 support library. This project aims to provi

Johan Berg 2.5k Jan 2, 2023
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
Lazy load of images in Android

LazyList A simple library to display images in Android ListView. Images are being downloaded asynchronously in the background. Images are being cached

Fedor Vlasov 1.2k Nov 15, 2022
Android widget with pull to refresh for all the views,and support loadMore for ListView , RecyclerView, GridView and SwipeRefreshLayout.

CommonPullToRefresh Android widget with pull to refresh for all the views,and support loadMore for ListView,RecyclerView,GridView and SwipeRefreshLayo

null 1.1k Nov 10, 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
Horizontal list view for Android which allows variable items widths

Deprecated This widget is now deprecated and it won't be updated anymore. Use RecyclerView instead Horizontal Variable ListView Horizontal ListView fo

Alessandro Crugnola 862 Nov 15, 2022
A ListView with pinned section headers for Android

PinnedHeaderListView This library provides a sectioned ListView with pinned headers. It looks and feels much like the default contacts app does on And

James Smith 665 Nov 29, 2022
A generic, customizable, open source Android ListView implementation that has 'Pull to Refresh' functionality.

Android 'Pull to Refresh' ListView library Demo video: http://www.youtube.com/watch?v=VjmdELnm3GI Project A generic, customizable, open source Android

Erik Wallentinsen 639 Nov 17, 2022