├── README.md ├── StickySwipePullIndexListview.iml ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── rizafu │ │ └── stickyswipepullindexlistview │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rizafu │ │ └── stickyswipepullindexlistview │ │ ├── MyActivity.java │ │ └── customview │ │ ├── IndexView.java │ │ └── PullToRefreshStickyList.java │ └── res │ ├── drawable-hdpi │ └── ic_launcher.png │ ├── drawable-mdpi │ └── ic_launcher.png │ ├── drawable-xhdpi │ └── ic_launcher.png │ ├── drawable-xxhdpi │ └── ic_launcher.png │ ├── layout │ ├── activity_my.xml │ ├── header.xml │ ├── list_item.xml │ └── package_row.xml │ ├── menu │ └── my.xml │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── arrays.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── build └── intermediates │ ├── dex-cache │ └── cache.xml │ └── model_data.bin ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── import-summary.txt ├── indexable.jpg ├── libraryPTR ├── build.gradle ├── build │ ├── generated │ │ └── source │ │ │ ├── buildConfig │ │ │ ├── debug │ │ │ │ └── com │ │ │ │ │ └── handmark │ │ │ │ │ └── pulltorefresh │ │ │ │ │ └── library │ │ │ │ │ └── BuildConfig.java │ │ │ ├── release │ │ │ │ └── com │ │ │ │ │ └── handmark │ │ │ │ │ └── pulltorefresh │ │ │ │ │ └── library │ │ │ │ │ └── BuildConfig.java │ │ │ └── test │ │ │ │ └── debug │ │ │ │ └── com │ │ │ │ └── handmark │ │ │ │ └── pulltorefresh │ │ │ │ └── library │ │ │ │ └── test │ │ │ │ └── BuildConfig.java │ │ │ └── r │ │ │ ├── debug │ │ │ └── com │ │ │ │ └── handmark │ │ │ │ └── pulltorefresh │ │ │ │ └── library │ │ │ │ └── R.java │ │ │ ├── release │ │ │ └── com │ │ │ │ └── handmark │ │ │ │ └── pulltorefresh │ │ │ │ └── library │ │ │ │ └── R.java │ │ │ └── test │ │ │ └── debug │ │ │ └── com │ │ │ └── handmark │ │ │ └── pulltorefresh │ │ │ └── library │ │ │ ├── R.java │ │ │ └── test │ │ │ └── R.java │ ├── intermediates │ │ ├── bundles │ │ │ ├── debug │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── R.txt │ │ │ │ ├── classes.jar │ │ │ │ └── res │ │ │ │ │ ├── anim │ │ │ │ │ ├── slide_in_from_bottom.xml │ │ │ │ │ ├── slide_in_from_top.xml │ │ │ │ │ ├── slide_out_to_bottom.xml │ │ │ │ │ └── slide_out_to_top.xml │ │ │ │ │ ├── drawable-hdpi-v4 │ │ │ │ │ ├── default_ptr_flip.png │ │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ │ └── indicator_arrow.png │ │ │ │ │ ├── drawable-mdpi-v4 │ │ │ │ │ ├── default_ptr_flip.png │ │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ │ └── indicator_arrow.png │ │ │ │ │ ├── drawable-xhdpi-v4 │ │ │ │ │ ├── default_ptr_flip.png │ │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ │ └── indicator_arrow.png │ │ │ │ │ ├── drawable │ │ │ │ │ ├── indicator_bg_bottom.xml │ │ │ │ │ └── indicator_bg_top.xml │ │ │ │ │ ├── layout │ │ │ │ │ ├── pull_to_refresh_header_horizontal.xml │ │ │ │ │ └── pull_to_refresh_header_vertical.xml │ │ │ │ │ ├── values-ar │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-cs │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-de │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-es │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-fi │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-fr │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-he │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-it │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-iw │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-ja │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-ko │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-nl │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-pl │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-pt-rBR │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-pt │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-ro │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-ru │ │ │ │ │ └── values.xml │ │ │ │ │ ├── values-zh │ │ │ │ │ └── values.xml │ │ │ │ │ └── values │ │ │ │ │ └── values.xml │ │ │ └── release │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── R.txt │ │ │ │ ├── classes.jar │ │ │ │ └── res │ │ │ │ ├── anim │ │ │ │ ├── slide_in_from_bottom.xml │ │ │ │ ├── slide_in_from_top.xml │ │ │ │ ├── slide_out_to_bottom.xml │ │ │ │ └── slide_out_to_top.xml │ │ │ │ ├── drawable-hdpi-v4 │ │ │ │ ├── default_ptr_flip.png │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ └── indicator_arrow.png │ │ │ │ ├── drawable-mdpi-v4 │ │ │ │ ├── default_ptr_flip.png │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ └── indicator_arrow.png │ │ │ │ ├── drawable-xhdpi-v4 │ │ │ │ ├── default_ptr_flip.png │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ └── indicator_arrow.png │ │ │ │ ├── drawable │ │ │ │ ├── indicator_bg_bottom.xml │ │ │ │ └── indicator_bg_top.xml │ │ │ │ ├── layout │ │ │ │ ├── pull_to_refresh_header_horizontal.xml │ │ │ │ └── pull_to_refresh_header_vertical.xml │ │ │ │ ├── values-ar │ │ │ │ └── values.xml │ │ │ │ ├── values-cs │ │ │ │ └── values.xml │ │ │ │ ├── values-de │ │ │ │ └── values.xml │ │ │ │ ├── values-es │ │ │ │ └── values.xml │ │ │ │ ├── values-fi │ │ │ │ └── values.xml │ │ │ │ ├── values-fr │ │ │ │ └── values.xml │ │ │ │ ├── values-he │ │ │ │ └── values.xml │ │ │ │ ├── values-it │ │ │ │ └── values.xml │ │ │ │ ├── values-iw │ │ │ │ └── values.xml │ │ │ │ ├── values-ja │ │ │ │ └── values.xml │ │ │ │ ├── values-ko │ │ │ │ └── values.xml │ │ │ │ ├── values-nl │ │ │ │ └── values.xml │ │ │ │ ├── values-pl │ │ │ │ └── values.xml │ │ │ │ ├── values-pt-rBR │ │ │ │ └── values.xml │ │ │ │ ├── values-pt │ │ │ │ └── values.xml │ │ │ │ ├── values-ro │ │ │ │ └── values.xml │ │ │ │ ├── values-ru │ │ │ │ └── values.xml │ │ │ │ ├── values-zh │ │ │ │ └── values.xml │ │ │ │ └── values │ │ │ │ └── values.xml │ │ ├── classes │ │ │ ├── debug │ │ │ │ └── com │ │ │ │ │ └── handmark │ │ │ │ │ └── pulltorefresh │ │ │ │ │ └── library │ │ │ │ │ ├── BuildConfig.class │ │ │ │ │ ├── ILoadingLayout.class │ │ │ │ │ ├── IPullToRefresh.class │ │ │ │ │ ├── LoadingLayoutProxy.class │ │ │ │ │ ├── OverscrollHelper$1.class │ │ │ │ │ ├── OverscrollHelper.class │ │ │ │ │ ├── PullToRefreshAdapterViewBase$1.class │ │ │ │ │ ├── PullToRefreshAdapterViewBase.class │ │ │ │ │ ├── PullToRefreshBase$1.class │ │ │ │ │ ├── PullToRefreshBase$2.class │ │ │ │ │ ├── PullToRefreshBase$3.class │ │ │ │ │ ├── PullToRefreshBase$4.class │ │ │ │ │ ├── PullToRefreshBase$AnimationStyle.class │ │ │ │ │ ├── PullToRefreshBase$Mode.class │ │ │ │ │ ├── PullToRefreshBase$OnLastItemVisibleListener.class │ │ │ │ │ ├── PullToRefreshBase$OnPullEventListener.class │ │ │ │ │ ├── PullToRefreshBase$OnRefreshListener.class │ │ │ │ │ ├── PullToRefreshBase$OnRefreshListener2.class │ │ │ │ │ ├── PullToRefreshBase$OnSmoothScrollFinishedListener.class │ │ │ │ │ ├── PullToRefreshBase$Orientation.class │ │ │ │ │ ├── PullToRefreshBase$SmoothScrollRunnable.class │ │ │ │ │ ├── PullToRefreshBase$State.class │ │ │ │ │ ├── PullToRefreshBase.class │ │ │ │ │ ├── PullToRefreshExpandableListView$InternalExpandableListView.class │ │ │ │ │ ├── PullToRefreshExpandableListView$InternalExpandableListViewSDK9.class │ │ │ │ │ ├── PullToRefreshExpandableListView.class │ │ │ │ │ ├── PullToRefreshGridView$InternalGridView.class │ │ │ │ │ ├── PullToRefreshGridView$InternalGridViewSDK9.class │ │ │ │ │ ├── PullToRefreshGridView.class │ │ │ │ │ ├── PullToRefreshHorizontalScrollView$InternalHorizontalScrollViewSDK9.class │ │ │ │ │ ├── PullToRefreshHorizontalScrollView.class │ │ │ │ │ ├── PullToRefreshListView$1.class │ │ │ │ │ ├── PullToRefreshListView$InternalListView.class │ │ │ │ │ ├── PullToRefreshListView$InternalListViewSDK9.class │ │ │ │ │ ├── PullToRefreshListView.class │ │ │ │ │ ├── PullToRefreshScrollView$InternalScrollViewSDK9.class │ │ │ │ │ ├── PullToRefreshScrollView.class │ │ │ │ │ ├── PullToRefreshWebView$1.class │ │ │ │ │ ├── PullToRefreshWebView$2.class │ │ │ │ │ ├── PullToRefreshWebView$InternalWebViewSDK9.class │ │ │ │ │ ├── PullToRefreshWebView.class │ │ │ │ │ ├── R$anim.class │ │ │ │ │ ├── R$attr.class │ │ │ │ │ ├── R$dimen.class │ │ │ │ │ ├── R$drawable.class │ │ │ │ │ ├── R$id.class │ │ │ │ │ ├── R$layout.class │ │ │ │ │ ├── R$string.class │ │ │ │ │ ├── R$styleable.class │ │ │ │ │ ├── R.class │ │ │ │ │ ├── extras │ │ │ │ │ ├── PullToRefreshWebView2$JsValueCallback.class │ │ │ │ │ ├── PullToRefreshWebView2.class │ │ │ │ │ └── SoundPullEventListener.class │ │ │ │ │ └── internal │ │ │ │ │ ├── EmptyViewMethodAccessor.class │ │ │ │ │ ├── FlipLoadingLayout$1.class │ │ │ │ │ ├── FlipLoadingLayout.class │ │ │ │ │ ├── IndicatorLayout$1.class │ │ │ │ │ ├── IndicatorLayout.class │ │ │ │ │ ├── LoadingLayout$1.class │ │ │ │ │ ├── LoadingLayout.class │ │ │ │ │ ├── RotateLoadingLayout.class │ │ │ │ │ ├── Utils.class │ │ │ │ │ ├── ViewCompat$SDK11.class │ │ │ │ │ ├── ViewCompat$SDK16.class │ │ │ │ │ └── ViewCompat.class │ │ │ └── release │ │ │ │ └── com │ │ │ │ └── handmark │ │ │ │ └── pulltorefresh │ │ │ │ └── library │ │ │ │ ├── BuildConfig.class │ │ │ │ ├── ILoadingLayout.class │ │ │ │ ├── IPullToRefresh.class │ │ │ │ ├── LoadingLayoutProxy.class │ │ │ │ ├── OverscrollHelper$1.class │ │ │ │ ├── OverscrollHelper.class │ │ │ │ ├── PullToRefreshAdapterViewBase$1.class │ │ │ │ ├── PullToRefreshAdapterViewBase.class │ │ │ │ ├── PullToRefreshBase$1.class │ │ │ │ ├── PullToRefreshBase$2.class │ │ │ │ ├── PullToRefreshBase$3.class │ │ │ │ ├── PullToRefreshBase$4.class │ │ │ │ ├── PullToRefreshBase$AnimationStyle.class │ │ │ │ ├── PullToRefreshBase$Mode.class │ │ │ │ ├── PullToRefreshBase$OnLastItemVisibleListener.class │ │ │ │ ├── PullToRefreshBase$OnPullEventListener.class │ │ │ │ ├── PullToRefreshBase$OnRefreshListener.class │ │ │ │ ├── PullToRefreshBase$OnRefreshListener2.class │ │ │ │ ├── PullToRefreshBase$OnSmoothScrollFinishedListener.class │ │ │ │ ├── PullToRefreshBase$Orientation.class │ │ │ │ ├── PullToRefreshBase$SmoothScrollRunnable.class │ │ │ │ ├── PullToRefreshBase$State.class │ │ │ │ ├── PullToRefreshBase.class │ │ │ │ ├── PullToRefreshExpandableListView$InternalExpandableListView.class │ │ │ │ ├── PullToRefreshExpandableListView$InternalExpandableListViewSDK9.class │ │ │ │ ├── PullToRefreshExpandableListView.class │ │ │ │ ├── PullToRefreshGridView$InternalGridView.class │ │ │ │ ├── PullToRefreshGridView$InternalGridViewSDK9.class │ │ │ │ ├── PullToRefreshGridView.class │ │ │ │ ├── PullToRefreshHorizontalScrollView$InternalHorizontalScrollViewSDK9.class │ │ │ │ ├── PullToRefreshHorizontalScrollView.class │ │ │ │ ├── PullToRefreshListView$1.class │ │ │ │ ├── PullToRefreshListView$InternalListView.class │ │ │ │ ├── PullToRefreshListView$InternalListViewSDK9.class │ │ │ │ ├── PullToRefreshListView.class │ │ │ │ ├── PullToRefreshScrollView$InternalScrollViewSDK9.class │ │ │ │ ├── PullToRefreshScrollView.class │ │ │ │ ├── PullToRefreshWebView$1.class │ │ │ │ ├── PullToRefreshWebView$2.class │ │ │ │ ├── PullToRefreshWebView$InternalWebViewSDK9.class │ │ │ │ ├── PullToRefreshWebView.class │ │ │ │ ├── R$anim.class │ │ │ │ ├── R$attr.class │ │ │ │ ├── R$dimen.class │ │ │ │ ├── R$drawable.class │ │ │ │ ├── R$id.class │ │ │ │ ├── R$layout.class │ │ │ │ ├── R$string.class │ │ │ │ ├── R$styleable.class │ │ │ │ ├── R.class │ │ │ │ ├── extras │ │ │ │ ├── PullToRefreshWebView2$JsValueCallback.class │ │ │ │ ├── PullToRefreshWebView2.class │ │ │ │ └── SoundPullEventListener.class │ │ │ │ └── internal │ │ │ │ ├── EmptyViewMethodAccessor.class │ │ │ │ ├── FlipLoadingLayout$1.class │ │ │ │ ├── FlipLoadingLayout.class │ │ │ │ ├── IndicatorLayout$1.class │ │ │ │ ├── IndicatorLayout.class │ │ │ │ ├── LoadingLayout$1.class │ │ │ │ ├── LoadingLayout.class │ │ │ │ ├── RotateLoadingLayout.class │ │ │ │ ├── Utils.class │ │ │ │ ├── ViewCompat$SDK11.class │ │ │ │ ├── ViewCompat$SDK16.class │ │ │ │ └── ViewCompat.class │ │ ├── incremental │ │ │ ├── aidl │ │ │ │ ├── debug │ │ │ │ │ └── dependency.store │ │ │ │ ├── release │ │ │ │ │ └── dependency.store │ │ │ │ └── test │ │ │ │ │ └── debug │ │ │ │ │ └── dependency.store │ │ │ ├── mergeAssets │ │ │ │ ├── debug │ │ │ │ │ └── merger.xml │ │ │ │ ├── release │ │ │ │ │ └── merger.xml │ │ │ │ └── test │ │ │ │ │ └── debug │ │ │ │ │ └── merger.xml │ │ │ ├── mergeResources │ │ │ │ └── test │ │ │ │ │ └── debug │ │ │ │ │ └── merger.xml │ │ │ └── packageResources │ │ │ │ ├── debug │ │ │ │ └── merger.xml │ │ │ │ └── release │ │ │ │ └── merger.xml │ │ ├── libs │ │ │ └── libraryPTR-debug-test.ap_ │ │ ├── manifests │ │ │ └── test │ │ │ │ └── debug │ │ │ │ └── AndroidManifest.xml │ │ ├── res │ │ │ └── test │ │ │ │ └── debug │ │ │ │ ├── anim │ │ │ │ ├── slide_in_from_bottom.xml │ │ │ │ ├── slide_in_from_top.xml │ │ │ │ ├── slide_out_to_bottom.xml │ │ │ │ └── slide_out_to_top.xml │ │ │ │ ├── drawable-hdpi-v4 │ │ │ │ ├── default_ptr_flip.png │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ └── indicator_arrow.png │ │ │ │ ├── drawable-mdpi-v4 │ │ │ │ ├── default_ptr_flip.png │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ └── indicator_arrow.png │ │ │ │ ├── drawable-xhdpi-v4 │ │ │ │ ├── default_ptr_flip.png │ │ │ │ ├── default_ptr_rotate.png │ │ │ │ └── indicator_arrow.png │ │ │ │ ├── drawable │ │ │ │ ├── indicator_bg_bottom.xml │ │ │ │ └── indicator_bg_top.xml │ │ │ │ ├── layout │ │ │ │ ├── pull_to_refresh_header_horizontal.xml │ │ │ │ └── pull_to_refresh_header_vertical.xml │ │ │ │ ├── values-ar │ │ │ │ └── values.xml │ │ │ │ ├── values-cs │ │ │ │ └── values.xml │ │ │ │ ├── values-de │ │ │ │ └── values.xml │ │ │ │ ├── values-es │ │ │ │ └── values.xml │ │ │ │ ├── values-fi │ │ │ │ └── values.xml │ │ │ │ ├── values-fr │ │ │ │ └── values.xml │ │ │ │ ├── values-he │ │ │ │ └── values.xml │ │ │ │ ├── values-it │ │ │ │ └── values.xml │ │ │ │ ├── values-iw │ │ │ │ └── values.xml │ │ │ │ ├── values-ja │ │ │ │ └── values.xml │ │ │ │ ├── values-ko │ │ │ │ └── values.xml │ │ │ │ ├── values-nl │ │ │ │ └── values.xml │ │ │ │ ├── values-pl │ │ │ │ └── values.xml │ │ │ │ ├── values-pt-rBR │ │ │ │ └── values.xml │ │ │ │ ├── values-pt │ │ │ │ └── values.xml │ │ │ │ ├── values-ro │ │ │ │ └── values.xml │ │ │ │ ├── values-ru │ │ │ │ └── values.xml │ │ │ │ ├── values-zh │ │ │ │ └── values.xml │ │ │ │ └── values │ │ │ │ └── values.xml │ │ └── symbols │ │ │ └── test │ │ │ └── debug │ │ │ └── R.txt │ ├── outputs │ │ └── aar │ │ │ └── libraryPTR.aar │ └── tmp │ │ ├── packageDebugJar │ │ └── MANIFEST.MF │ │ └── packageReleaseJar │ │ └── MANIFEST.MF ├── libraryPTR.iml └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── handmark │ │ └── pulltorefresh │ │ └── library │ │ ├── ILoadingLayout.java │ │ ├── IPullToRefresh.java │ │ ├── LoadingLayoutProxy.java │ │ ├── OverscrollHelper.java │ │ ├── PullToRefreshAdapterViewBase.java │ │ ├── PullToRefreshBase.java │ │ ├── PullToRefreshExpandableListView.java │ │ ├── PullToRefreshGridView.java │ │ ├── PullToRefreshHorizontalScrollView.java │ │ ├── PullToRefreshListView.java │ │ ├── PullToRefreshScrollView.java │ │ ├── PullToRefreshWebView.java │ │ ├── extras │ │ ├── PullToRefreshWebView2.java │ │ └── SoundPullEventListener.java │ │ └── internal │ │ ├── EmptyViewMethodAccessor.java │ │ ├── FlipLoadingLayout.java │ │ ├── IndicatorLayout.java │ │ ├── LoadingLayout.java │ │ ├── RotateLoadingLayout.java │ │ ├── Utils.java │ │ └── ViewCompat.java │ └── res │ ├── anim │ ├── slide_in_from_bottom.xml │ ├── slide_in_from_top.xml │ ├── slide_out_to_bottom.xml │ └── slide_out_to_top.xml │ ├── drawable-hdpi │ ├── default_ptr_flip.png │ ├── default_ptr_rotate.png │ └── indicator_arrow.png │ ├── drawable-mdpi │ ├── default_ptr_flip.png │ ├── default_ptr_rotate.png │ └── indicator_arrow.png │ ├── drawable-xhdpi │ ├── default_ptr_flip.png │ ├── default_ptr_rotate.png │ └── indicator_arrow.png │ ├── drawable │ ├── indicator_bg_bottom.xml │ └── indicator_bg_top.xml │ ├── layout │ ├── pull_to_refresh_header_horizontal.xml │ └── pull_to_refresh_header_vertical.xml │ ├── values-ar │ └── pull_refresh_strings.xml │ ├── values-cs │ └── pull_refresh_strings.xml │ ├── values-de │ └── pull_refresh_strings.xml │ ├── values-es │ └── pull_refresh_strings.xml │ ├── values-fi │ └── pull_refresh_strings.xml │ ├── values-fr │ └── pull_refresh_strings.xml │ ├── values-he │ └── pull_refresh_strings.xml │ ├── values-it │ └── pull_refresh_strings.xml │ ├── values-iw │ └── pull_refresh_strings.xml │ ├── values-ja │ └── pull_refresh_strings.xml │ ├── values-ko │ └── pull_refresh_strings.xml │ ├── values-nl │ └── pull_refresh_strings.xml │ ├── values-pl │ └── pull_refresh_strings.xml │ ├── values-pt-rBR │ └── pull_refresh_strings.xml │ ├── values-pt │ └── pull_refresh_strings.xml │ ├── values-ro │ └── pull_refresh_strings.xml │ ├── values-ru │ └── pull_refresh_strings.xml │ ├── values-zh │ └── pull_refresh_strings.xml │ └── values │ ├── attrs.xml │ ├── dimens.xml │ ├── ids.xml │ └── pull_refresh_strings.xml ├── list.jpg ├── local.properties ├── pull.jpg ├── settings.gradle ├── sticky.jpg └── swipe.jpg /README.md: -------------------------------------------------------------------------------- 1 | Android-Swipe-StickyHeader-PullToRefresh-Indexable-ListView 2 | =========================================================== 3 | 4 | base on : 5 | https://github.com/emilsjolander/StickyListHeaders 6 | https://github.com/47deg/android-swipelistview 7 | https://github.com/chrisbanes/Android-PullToRefresh 8 | https://github.com/xuyangbill/ListIndex 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /StickySwipePullIndexListview.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 19 5 | buildToolsVersion "20.0.0" 6 | 7 | defaultConfig { 8 | applicationId "com.rizafu.stickyswipepullindexlistview" 9 | minSdkVersion 15 10 | targetSdkVersion 20 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | runProguard false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | repositories { 23 | maven { url 'http://clinker.47deg.com/nexus/content/groups/public' } 24 | } 25 | 26 | dependencies { 27 | compile fileTree(dir: 'libs', include: ['*.jar']) 28 | compile 'com.android.support:appcompat-v7:20.0.0' 29 | compile 'se.emilsjolander:stickylistheaders:2.5.1' 30 | compile('com.fortysevendeg.swipelistview:swipelistview:1.0-SNAPSHOT@aar') { 31 | transitive = true 32 | } 33 | compile project(':libraryPTR') 34 | } 35 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/rizafu/stickyswipepullindexlistview/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.rizafu.stickyswipepullindexlistview; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/rizafu/stickyswipepullindexlistview/customview/IndexView.java: -------------------------------------------------------------------------------- 1 | package com.rizafu.stickyswipepullindexlistview.customview; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.Context; 5 | import android.graphics.Color; 6 | import android.os.Build; 7 | import android.util.AttributeSet; 8 | import android.view.Gravity; 9 | import android.view.MotionEvent; 10 | import android.view.View; 11 | import android.view.animation.AlphaAnimation; 12 | import android.view.animation.Animation; 13 | import android.widget.LinearLayout; 14 | import android.widget.TextView; 15 | 16 | import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter; 17 | 18 | public class IndexView extends LinearLayout { 19 | public IndexView(Context context) { 20 | super(context); 21 | } 22 | 23 | public IndexView(Context context, AttributeSet attrs) { 24 | super(context, attrs); 25 | } 26 | 27 | @TargetApi(Build.VERSION_CODES.HONEYCOMB) 28 | public IndexView(Context context, AttributeSet attrs, int defStyle) { 29 | super(context, attrs, defStyle); 30 | } 31 | 32 | public void init(final PullToRefreshStickyList pullToRefreshStickyList, final TextView textView) { 33 | setOrientation(VERTICAL); 34 | 35 | addTextView('#'); 36 | for (int i = 0; i < 26; i++) { 37 | addTextView((char) ('A' + i)); 38 | } 39 | 40 | final Animation animation = new AlphaAnimation(1, 0); 41 | animation.setDuration(1500); 42 | animation.setFillAfter(true); 43 | 44 | final StickyListHeadersAdapter listAdapter; 45 | listAdapter = pullToRefreshStickyList.getRefreshableView().getAdapter(); 46 | 47 | setOnTouchListener(new OnTouchListener() { 48 | 49 | @Override 50 | public boolean onTouch(View v, MotionEvent event) { 51 | 52 | switch (event.getAction()) { 53 | case MotionEvent.ACTION_DOWN: 54 | case MotionEvent.ACTION_MOVE: 55 | int position = (int) (event.getY() * 27 / v.getHeight()); 56 | if (position >= 0 && position <= 26) { 57 | char c; 58 | int localPosition; 59 | if (position == 0) { 60 | c = '#'; 61 | localPosition = 0; 62 | } else { 63 | c = (char) ('A' - 1 + position); 64 | localPosition = searchPosition(listAdapter, c); 65 | } 66 | if (localPosition != -1) { 67 | pullToRefreshStickyList.getRefreshableView().setSelection(localPosition); 68 | } 69 | textView.setText(String.valueOf(c)); 70 | if (textView.getVisibility() == View.GONE) { 71 | textView.setVisibility(View.VISIBLE); 72 | } 73 | textView.startAnimation(animation); 74 | } else { 75 | pullToRefreshStickyList.getRefreshableView().setSelection(0); 76 | } 77 | return true; 78 | } 79 | return false; 80 | 81 | } 82 | }); 83 | } 84 | 85 | private void addTextView(char c) { 86 | TextView textView = new TextView(getContext()); 87 | textView.setText(String.valueOf(c)); 88 | textView.setTextColor(Color.WHITE); 89 | textView.setGravity(Gravity.CENTER); 90 | LayoutParams lllp = new LayoutParams( 91 | LayoutParams.MATCH_PARENT, 0); 92 | lllp.weight = 1; 93 | addView(textView, lllp); 94 | } 95 | 96 | private int searchPosition(StickyListHeadersAdapter listAdapter, char c) { 97 | for (int i = 0; i < listAdapter.getCount(); i++) { 98 | if (c == listAdapter.getItem(i).toString().charAt(0)){ 99 | return i; 100 | } 101 | } 102 | return -1; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rizafu/Android-Swipe-StickyHeader-PullToRefresh-Indexable-ListView/d7080845997ef52ffcdbd1d73ea167a2010fad13/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rizafu/Android-Swipe-StickyHeader-PullToRefresh-Indexable-ListView/d7080845997ef52ffcdbd1d73ea167a2010fad13/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rizafu/Android-Swipe-StickyHeader-PullToRefresh-Indexable-ListView/d7080845997ef52ffcdbd1d73ea167a2010fad13/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rizafu/Android-Swipe-StickyHeader-PullToRefresh-Indexable-ListView/d7080845997ef52ffcdbd1d73ea167a2010fad13/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_my.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 13 | 14 | 20 | 21 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/header.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/package_row.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 20 | 21 | 25 | 26 | 31 | 32 |