{"id":18116729,"url":"https://github.com/liqinew/endlessloopframe","last_synced_at":"2025-04-06T10:21:19.560Z","repository":{"id":127285449,"uuid":"116351220","full_name":"LiqiNew/EndlessLoopFrame","owner":"LiqiNew","description":":racehorse: 支持轮询，无限循环滑动，图片手势缩放等效果。","archived":false,"fork":false,"pushed_at":"2018-09-08T03:13:20.000Z","size":3427,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-12T15:53:02.095Z","etag":null,"topics":["banner","endless","endlessloop","loop","slideshow","viewpager"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LiqiNew.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-05T06:36:27.000Z","updated_at":"2018-09-08T03:12:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"ca736743-8804-48f4-adfc-e3c9efc0a241","html_url":"https://github.com/LiqiNew/EndlessLoopFrame","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiqiNew%2FEndlessLoopFrame","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiqiNew%2FEndlessLoopFrame/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiqiNew%2FEndlessLoopFrame/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiqiNew%2FEndlessLoopFrame/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LiqiNew","download_url":"https://codeload.github.com/LiqiNew/EndlessLoopFrame/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247465090,"owners_count":20943120,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["banner","endless","endlessloop","loop","slideshow","viewpager"],"created_at":"2024-11-01T04:13:36.697Z","updated_at":"2025-04-06T10:21:19.531Z","avatar_url":"https://github.com/LiqiNew.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![](https://jitpack.io/v/liqinew/endlessloopframe.svg)](https://jitpack.io/#liqinew/endlessloopframe)\n[![](https://img.shields.io/badge/%E4%BD%9C%E8%80%85-%E6%9D%8E%E5%A5%87-orange.svg)](https://github.com/LiqiNew)\n\n# EndlessLoopFrame\n支持轮询，无限循环滑动，图片手势缩放等效果。\n### 内部远程依赖Library（已经远程依赖的Library，切勿重复依赖。）\n\n**appcompat-v7：'com.android.support:appcompat-v7:25.2.0'**\u003cbr\u003e\n\n# 如何使用?\n\n### Gradle远程依赖 ###\n\n**1：在项目根目录build.gradley**\t\u003cbr\u003e\n```gradle\nallprojects {\n　　repositories {\n  　　//依赖仓库\n　　　maven { url 'https://jitpack.io' }\n　　}\n}\n```\n**2：依赖EndlessLoopFrame**\u003cbr\u003e\n```gradle\ncompile 'com.github.liqinew:endlessloopframe:V.1.0.1'\n```\n\n### 三种效果案例实现\n\n#### XML布局定义\n\n* **XML定义一（设置为android:name=\"com.liqi.endlessloop.CycleViewPager\"）**\n```xml\n    \u003cfragment\n        android:id=\"@+id/fragment_cycle_viewpager\"\n        android:name=\"com.liqi.endlessloop.CycleViewPager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"200dp\"/\u003e\n```\n* **XML定义二（设置为class=\"com.liqi.endlessloop.CycleViewPager\"）**\n```xml\n    \u003cfragment\n        android:id=\"@+id/fragment_cycle_viewpager\"\n        class=\"com.liqi.endlessloop.CycleViewPager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"200dp\"/\u003e\n```\n#### 获取XML中定义的CycleViewPager\n\n* **继承AppCompatActivity对象**\n```java\nCycleViewPager mCycleViewPager=(CycleViewPager)getSupportFragmentManager().findFragmentById(R.id.fragment_cycle_viewpager);\n```\n#### 一：轮播案例效果\n\n* **效果图**\n\u003cimage src=\"./image/demo_01.gif\" width=\"400px\" height=\"700px\"/\u003e\n\n* **\"轮播\"代码实现**\n\n**参数设置(OnCycleViewPagerListener接口提供设置API)**\n```java\n/**\n* 参阅底部OnCycleViewPagerListener接口API设置\n*/\n...\n\n/**\n* 开启轮播，默认不轮播,轮播一定是循环的\n*\n* @return OnViewPagerDataListener\n*/\nopenWheel();\n\n/**\n* 关闭轮播.并设置是否开启循环\n*\n* @param isCycle 是否开启循环\n*\n* @return OnViewPagerDataListener\n*/\ncloseWheel();\n```\n* **数据添加和替换(OnViewPagerDataListener接口API请查阅底部)\n通过OnCycleViewPagerListener接口openWheel()或者closeWheel()方法获取OnViewPagerDataListener接口，\u003cbr\u003e\n然后通过OnViewPagerDataListener接口API去操作。\u003cbr\u003e**\n\n#### 二：手势无限循环滑动+图片手势滑动缩放案例效果\n\n* **效果图**\n\n\u003cimage src=\"./image/demo_02.gif\" width=\"400px\" height=\"700px\"/\u003e\n\n* **\"手势无限循环滑动\"代码实现注意事项**\n\n**参数还是调用OnCycleViewPagerListener接口提供的API去设置**\u003cbr\u003e\n\n**1：如果不需要轮播，请勿调用OnCycleViewPagerListener接口中openWheel()方法去开启轮播。**\u003cbr\u003e\n\n**2：记得把OnCycleViewPagerListener接口setCycle(true)方法设置为true。如果不无限循环滑动得话，请设置为false。**\u003cbr\u003e\n\n* **\"图片手势滑动缩放\"代码实现**\n\n**把传输给CycleViewPager的ImageView值对象变成TouchImageView对象，TouchImageView是继承ImageView自定扩展对象**\n\n```java\n/**\n* TouchImageView的API同ImageView一致\n*/\nTouchImageView touchImageView = new TouchImageView(this);\ntouchImageView.setBackgroundColor(Color.parseColor(\"#000000\"));\nLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);\ntouchImageView.setLayoutParams(lp);\ntouchImageView.setImageResource(R.drawable.xxxx);\n```\n\n#### 三：界面左右偏距效果案例\n\n* **效果图**\n\n\u003cimage src=\"./image/demo_03.gif\" width=\"400px\" height=\"200px\"/\u003e\n\n* **\"界面左右偏距\"代码实现**\n\n**调用OnCycleViewPagerListener接口中leftRightDisplayOffset(50,50)设置左右偏距即可**\n\n### A P I\n\n#### OnCycleViewPagerListener接口操作API(非静态调用)\n```java\n /**\n     * 设置页面切换监听器\n     *\n     * @param onPageChangeListener 页面切换监听器\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setOnPageChangeListener(ViewPager.OnPageChangeListener onPageChangeListener);\n\n    /**\n     * 设置指示器底部居中，默认指示器在右方\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setIndicatorBottomCenter();\n\n    /**\n     * 设置指示器顶部居中，默认指示器在右方\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setIndicatorTopCenter();\n\n    /**\n     * 设置指示器对齐方式。默认指示器在右方\n     *\n     * @param relativeAlignOne 对齐位置方式1。使用RelativeLayout的对齐方式去设置“上下左右居中”对齐方式\n     * @param relativeAlignTwo 对齐位置方式2。使用RelativeLayout的对齐方式去设置“上下左右居中”对齐方式\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setIndicatorAlignManner(int relativeAlignOne, int relativeAlignTwo);\n\n    /**\n     * 是否处于循环状态\n     *\n     * @return 循环状态。true是循环，false没有循环\n     */\n    OnCycleViewPagerListener.isCycle();\n\n    /**\n     * 是否循环，默认不开启，开启前，请将views的最前面与最后面各加入一个视图，用于循环\n     *\n     * @param isCycle 是否循环\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setCycle(boolean isCycle);\n\n    /**\n     * 是否处于轮播状态\n     *\n     * @return 轮播状态。true是轮播，false没有轮播\n     */\n    OnCycleViewPagerListener.isWheel();\n\n    /**\n     * 设置轮播暂停时间，即每多少秒切换到下一张视图.默认5000ms\n     *\n     * @param time 秒为单位\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setTime(int time);\n\n    /**\n     * 隐藏CycleViewPager\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.hide();\n\n    /**\n     * 返回内置的viewpager\n     *\n     * @return BaseViewPager\n     */\n     OnCycleViewPagerListener.getViewPager();\n\n    /**\n     * 设置viewpager是否可以滚动\n     *\n     * @param enable\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setScrollable(boolean enable);\n\n    /**\n     * 返回当前位置,循环时需要注意返回的position包含之前在views最前方与最后方加入的视图，即当前页面试图在views集合的位置\n     *\n     * @return 当前界面显示位置\n     */\n    OnCycleViewPagerListener.getCurrentPostion();\n\n    /**\n     * 设置指示器图片\n     *\n     * @param selectedIndicatorId 指示器选择图片\n     * @param defaultIndicatorId  指示器默认图片\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setIndicatorImageId(@DrawableRes int selectedIndicatorId, @DrawableRes int defaultIndicatorId);\n\n    /**\n     * 如果当前页面嵌套在另一个viewPager中，为了在进行滚动时阻断父ViewPager滚动，可以 阻止父ViewPager滑动事件\n     * 父ViewPager需要实现BaseViewPager中的setScrollable方法\n     *\n     * @param V \u003cV extends BaseViewPager\u003e\n     *\n     * @return OnCycleViewPagerListener\n     */\n     OnCycleViewPagerListener.disableOutsideViewPagerTouchEvent(V parentViewPager);\n\n    /**\n     * 设置viewpager过度动画渐出渐入动画\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.viewPagerGradientDynamic();\n\n    /**\n     * viewpager切换速度时间设置\n     *\n     * @param duration 切换过度时间 单位：秒\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.viewPagerSwitchingSpeed(int duration);\n\n    /**\n     * 左右显示偏距设置\n     *\n     * @param left  左显示偏距\n     * @param right 右显示偏距\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.leftRightDisplayOffset(int left, int right);\n\n    /**\n     * 设置背景颜色\n     *\n     * @param colorId 颜色值ID\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.setBackgroundColorId(@ColorRes int colorId);\n\n    /**\n     * 开始装载数据\n     *\n     * @param views    装载数据imageView集合\n     * @param listener 监听器\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.startLoadData(List\u003cImageView\u003e views,\n                                           OnImageCycleViewListener listener);\n\n    /**\n     * 开始装载数据\n     *\n     * @param imageViews   要显示的views\n     * @param showPosition 默认显示位置\n     *\n     * @return OnCycleViewPagerListener\n     */\n    OnCycleViewPagerListener.startLoadData(@NonNull List\u003cImageView\u003e imageViews,\n                                           OnImageCycleViewListener listener, int showPosition);\n\n    /**\n     * 开启轮播，默认不轮播,轮播一定是循环的\n     *\n     * @return OnViewPagerDataListener\n     */\n    OnCycleViewPagerListener.openWheel();\n\n    /**\n     * 关闭轮播.并设置是否开启循环\n     *\n     * @param isCycle 是否开启循环\n     *\n     * @return OnViewPagerDataListener\n     */\n    OnCycleViewPagerListener.closeWheel(boolean isCycle);\n```\n\n#### OnViewPagerDataListener接口操作API(非静态调用)\n\n```java\n    /**\n     *数据赋值。并指定当前第几个界面展示\n     * @param imageViews ImageView数据集合\n     * @param showPosition 当前第几个界面展示\n     */\n    OnViewPagerDataListener.initAdapterListRefresh(List\u003cImageView\u003e imageViews, int showPosition);\n\n    /**\n     *数据赋值。\n     * @param imageViews ImageView数据集合\n     */\n    OnViewPagerDataListener.initAdapterListRefresh(List\u003cImageView\u003e imageViews);\n\n    /**\n     * 数据添加\n     * @param imageViews ImageView数据集合\n     */\n    OnViewPagerDataListener.addAdapterListRefresh(List\u003cImageView\u003e imageViews);\n\n    /**\n     * 数据添加\n     * @param imageView ImageView数据\n     */\n   OnViewPagerDataListener.addAdapterListRefresh(ImageView imageView);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliqinew%2Fendlessloopframe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliqinew%2Fendlessloopframe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliqinew%2Fendlessloopframe/lists"}