zguop / banner Goto Github PK
View Code? Open in Web Editor NEW🔥🔥ViewPager,ViewPager2无限轮播功能。自定义Indicator,支持一屏三页,支持仿魅族banner效果。极其简单的使用方式
License: Apache License 2.0
🔥🔥ViewPager,ViewPager2无限轮播功能。自定义Indicator,支持一屏三页,支持仿魅族banner效果。极其简单的使用方式
License: Apache License 2.0
item 滑出屏幕的时候 banner 刚好在切换,banner 调用了 onDetachedFromWindow -> removeCallbacks(task); 然后 item 再划入屏幕,就会发现 banner 卡在两个切换的item 中间, 等重新调用 startTurning 后, banner 把停顿的时间 比如3S 过了后 才会继续轮播
一屏三个半,然后滑动,将出现空白
在fragment上setHolderCreator报空指针怎么办
如題
indicator 要設置在veiwpager之外 有辦法解決嗎?
有辦法設置嗎?
我在使用1.0.3的时候,发现在打debug版本的包可以正常使用,到了release版本的时候,UI展示有问题,另外不能正常响应banner滑动事件
请问下大佬知道ViewPager2嵌套ViewPager2 的解决方案吗?
作者好 , 我在首页banner 上面放着有 视频播放器, 那个banner库 重写了dispatchTouchEvent, 执行按下 暂停轮播,松开继续轮播的效果。。。和视频播放起冲突起来了,,, 点击视频播放器, 会浮现各个功能按钮出来嘛,, 现在 点下视频播放器,2S后 就自个儿轮播了。。。这个有什么好的解决办法没呀
比XBanner使用場景更多一點,讚一個
CoordinatorLayout+AppbarLayout+NestedScrollView滑动冲突 只会滑动下面的布局 appbarLayout不会跟着滑动 banner放在NestedScrollView布局中,NestedScrollView嵌套RecycleView设置android:nestedScrollingEnabled="false"就行了,但是这个不行。给ViewPager2设置也不行
开启了混淆后会有问题,设置间距无效,指示器不动,不能无限循环
如果没有的话,作者可否加上这个功能呢?谢谢
比如当前选中页的字体颜色变换
startTurning 连续调用会导致 task 被重复执行,我这里表现的bug就是一次跳两页
解决办法:
public void stopTurning() {
removeCallbacks(task);
}
改成:
private final Handler handler = new Handler(Looper.getMainLooper());
public synchronized void stopTurning() {
handler.removeCallbacksAndMessages(null);
}
多次重新设置banner的数据,和BannerBgContainer,重置后,banner是从第一个开始轮播,但是BannerBgContainer还是从之前位置轮播,导致背景和banner显示图片没办法同步
混淆后就出问题了,有没有人贴出混淆代码呢
如题,感谢
我測試沒有Proguard的時候, Banner是可以正常無限滑動的, 但不知道為什麼只要有做了Proguard後, Banner就不能無限滑動而且連Indicator都有問題
nestedscrollview 顶部用该banner 按住banner上滑 滑动联动会失效
CoordinatorLayout AppBarLayout中嵌套RecyclerView,作为RecyclerView的item时,setCurrentItem(item, false)后,再次setCurrentItem(item)时,动画会滚动多次
如题
banner 设置水平滚动,外层NestedScrollView垂直滚动
把Banner嵌套在ViewPager里面,现在是Banner滑动完毕会触发外面嵌套的ViewPager的滑动。
如果可以,希望增加一个完全拦截滑动的设置,就是Banner滑动到最后一个再滑动,不会滑动外面的pager,而是把banner滑动到第一个。
使用FragmentStateAdapter 会看不到内容
androidx.viewpager2.adapter.FragmentStateAdapter
你好, 我尝试混淆包, 但是指示器不再能使用.
03-11 12:12:07.419 31229-31229 E/CrashReport: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.recyclerview.widget.RecyclerView.canScrollVertically(int)' on a null object reference
at androidx.recyclerview.widget.RecyclerView$LayoutManager.onInitializeAccessibilityNodeInfo(RecyclerView.java:10378)
at androidx.viewpager2.widget.ViewPager2$LinearLayoutManagerImpl.onInitializeAccessibilityNodeInfo(ViewPager2.java:1017)
at com.to.aboomy.pager2.Banner$ProxyLayoutManger.onInitializeAccessibilityNodeInfo(Banner.java:318)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.onInitializeAccessibilityNodeInfo(RecyclerView.java:10348)
at androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate.onInitializeAccessibilityNodeInfo(RecyclerViewAccessibilityDelegate.java:74)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityNodeInfo(AccessibilityDelegateCompat.java:86)
at android.view.View.onInitializeAccessibilityNodeInfo(View.java:6217)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:6178)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:22870)
at android.view.View.createAccessibilityNodeInfo(View.java:6161)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:145)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:6115)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:22782)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:256)
at androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate.onInitializeAccessibilityEvent(RecyclerViewAccessibilityDelegate.java:80)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:76)
at android.view.View.onInitializeAccessibilityEvent(View.java:6101)
at androidx.viewpager2.widget.ViewPager2$RecyclerViewImpl.onInitializeAccessibilityEvent(ViewPager2.java:982)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:5968)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:22721)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:195)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:112)
at android.view.View.sendAccessibilityEventUnchecked(View.java:5951)
at androidx.recyclerview.widget.RecyclerView.sendAccessibilityEventUnchecked(RecyclerView.java:3736)
at android.view.View.sendAccessibilityEventInternal(View.java:5930)
at android.view.View$AccessibilityDelegate.sendAccessibilityEvent(View.java:22679)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEvent(AccessibilityDelegateCompat.java:173)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEvent(AccessibilityDelegateCompat.java:107)
at android.view.View.sendAccessibilityEvent(View.java:5895)
at android.view.View$SendViewScrolledAccessibilityEvent.run(View.java:22597)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:191)
at android.app.ActivityThread.main(ActivityThread.java:5960)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821)
03-11 12:12:07.419 31229-31229 E/CrashReport: #++++++++++++++++++++++++++++++++++++++++++#
當我輪播時
到第二輪 page 0
最右邊不會出現page1的畫面
而是會透到底層的fragment
原本的banner沒這個問題
.setPageMargin(UIUtil.dip2px(this, 20), UIUtil.dip2px(this, 10))
如题
我写了Demo是没有问题的,可以一直划,但是加到项目中就不能无限滑动,使用的是com.to.aboomy.pager2banner.Banner,自己实现了recyclerviewadapter 轮播不同样式的布局.
比如我有3条数据,实际banner在左右各新增了一条,也就是这个库的实现原理,但是划到头的时候并没有切到最后一个,求解答
FragmentStateAdapterActivity 里的viewpager2原生实现正常,其它页面正常。
这有FragmentStateAdapterActivity 里的banner 不显示
位置:
final class PageTransformerAdapter extends OnPageChangeCallback {
private final LinearLayoutManager mLayoutManager;
报错:
12-30 17:14:23.466 16738-16738/com.glow.android.beta W/System.err: java.lang.NoSuchFieldException: No field mLayoutManager in class Landroidx/viewpager2/widget/PageTransformerAdapter; (declaration of 'androidx.viewpager2.widget.PageTransformerAdapter' appears in /data/app/com.glow.android.beta-2/base.apk)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at java.lang.Class.getDeclaredField(Native Method)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at com.glow.android.ui.widget.banner.Banner.q(SourceFile:254)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at com.glow.android.ui.widget.banner.Banner.r(SourceFile:69)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at com.glow.android.ui.widget.banner.Banner.<init>(SourceFile:59)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at com.glow.android.ui.widget.banner.Banner.<init>(SourceFile:53)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at java.lang.reflect.Constructor.newInstance(Native Method)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.createView(LayoutInflater.java:631)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.rInflate(LayoutInflater.java:855)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.rInflate(LayoutInflater.java:855)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.inflate(LayoutInflater.java:527)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.view.LayoutInflater.inflate(LayoutInflater.java:380)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at androidx.appcompat.app.AppCompatDelegateImpl.w(SourceFile:469)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at androidx.appcompat.app.AppCompatActivity.setContentView(SourceFile:140)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at com.glow.android.ui.pregnant.SwitchToPregnancyActivity.onCreate(SourceFile:55)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.app.Activity.performCreate(Activity.java:6876)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.app.ActivityThread.access$1100(ActivityThread.java:222)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.os.Looper.loop(Looper.java:158)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7229)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
12-30 17:14:23.476 16738-16738/com.glow.android.beta W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
val adapter = OriginVideoAdapter(R.layout.item_origin_banner, arrayListOf())
adapter.setOnItemClickListener { holder, view, position ->
Timber.tag("ddd").i("click $position")
Timber.tag("ddd").i("click2 "+mBanner?.currentPager)
}
你好 我是用viewpager2版本
我的banner有留左右的影片 也就是一頁三式
但當我點擊非中間的影片時
get的current position仍是中間的
但setOnItemClickListener的position位置會是正確的(可是他不是data實際的position)
請問我想要監聽是否點擊 兩側的影片
要如何取到他的值?
如題
你好
再問一個問題
我的需求是
能在banner顯示時 再BaseQuickAdapter內執行ui上某件事
但我觀察convert是一次創好的
這樣我要如何才能抓到實際上position的view item?
请问博主,viewPager2 可以循环拖动,这个主要的控制代码是哪些? 想借鉴一下如何实现的,但是看了代码没有找到这部分
作者大大
我在执行 AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
进行暗黑模式切换后轮播卡顿,求解答
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
params.bottomMargin = CommonUtil.dip2px(12);
IndicatorView indicatorView = new IndicatorView(getActivity())
.setIndicatorRatio(1f) //ratio,默认值是1 ,也就是说默认是圆点,根据这个值,值越大,拉伸越长,就成了矩形,小于1,就变扁了
.setIndicatorRadius(4f) //radius 点的大小
.setIndicatorSelectedRatio(1f)
.setIndicatorSelectedRadius(4f)
.setIndicatorSpacing(6f)
.setIndicatorStyle(IndicatorView.IndicatorStyle.INDICATOR_CIRCLE)
.setIndicatorColor(getResources().getColor(R.color.color_4b525f))
.setParams(params)
.setIndicatorSelectorColor(getResources().getColor(R.color.color_FFE7B6));
params.bottomMargin = CommonUtil.dip2px(12); 设置指示器的圆点距离底部的距离,.setParams(params)在一些布局场景,会无效。距离底部距离为0
請問是否支持禁止無限循環設定
1.0.5中,如果debug正常,而release版本异常。可能是因为com.to.aboomy.pager2banner.Banner#initViewPagerScrollProxy()中使用了反射,需要增加相应混淆规则。
怎么设置不无限轮播
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.