Giter VIP home page Giter VIP logo

banner's Introduction

Android轮播控件

Download

全新升级,基于ViewPager2实现无限轮播功能。可以自定义indicator,需自定义实现 Indicator 接口,内置了的IndicatorView,支持五种动画切换。支持传入RecyclerView.Adapter 即可实现无限轮播,支持任何ReyclerView.Apdater框架,集成使用请参考Demo。

logo

  • 支持自动轮播
  • 支持一屏三页
  • 支持自定义Indicator
  • 支持自定义view
  • 支持垂直滚动
  • 支持任意RecyclerView.adapter
  • 目前就4个类,良好的代码封装,更多请参考代码实现。

ViewPager2是androidx中的 还在使用support请使用ViewPager版本(持续维护...)banner请点击

效果图

点击下载 banner.apk 体验


基本使用的功能,请下载apk体验更流畅
tu1
描述 普通样式 两边缩放
一屏三页 img6 img7
IndicatorView IndicatorStyle
INDICATOR_CIRCLE INDICATOR_CIRCLE_RECT
img1 img2
INDICATOR_BEZIER INDICATOR_DASH
img3 img4
INDICATOR_BIG_CIRCLE
img5

注意:0.0.5版本开始,IndicatorView更新

  • INDICATOR_DASH:不再提供默认的长度,默认是没有长度的,一定要设置setIndicatorSelectedRatio属性,将圆点进行拉伸为矩形。

  • INDICATOR_BIG_CIRCLE:不再提供默认的Max圆,默认是一样大的,所以看起来没有效果,一定要设置indicatorSelectedRadius属性,控制选中的大小。

效果图 1 2
收集更多的效果 img12 img13
Indicator查看simple代码 img14 img15
img12 img12 img12
img12 img12 ...

使用步骤

Step 1.依赖banner

Gradle

    repositories {
        mavenCentral()
    }
	
dependencies{
    //已迁移至mavenCentral
    implementation 'io.github.zguop:pager2Banner:1.0.5'
}

或者引用本地lib

compile project(':pager2banner')

Step 2.xml

     <com.to.aboomy.pager2banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="150dp"/>

Step 3.自定义RecyclerView.Adapter

//自定义adapter
public class ImageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> 
 
//或者使用其他三方框架,都是支持的,如:BRVAH
public class ImageAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
    public ImageAdapter() {
        super(R.layout.item_image);
    }
    @Override
    protected void convert(@NonNull BaseViewHolder helper, String item) {
        Glide.with(mContext)
                .load(item)
                .into((ImageView) helper.getView(R.id.img));
    }
}

Step 4.在页面中使用Banner

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        banner = findViewById(R.id.banner);
        
        //使用内置Indicator
        IndicatorView indicator = new IndicatorView(this)
              .setIndicatorColor(Color.DKGRAY)
              .setIndicatorSelectorColor(Color.WHITE);
        
        //创建adapter
     	 ImageAdapter adapter = new ImageAdapter();
     	 
     	 //传入RecyclerView.Adapter 即可实现无限轮播
         banner.setIndicator(indicator)
              .setAdapter(adapter);
    }

简单设置一屏三页效果

//设置左右页面露出来的宽度及item与item之间的宽度
.setPageMargin(UIUtil.dip2px(this, 20), UIUtil.dip2px(this, 10))
//内置ScaleInTransformer,设置切换缩放动画
.setPageTransformer(true, new ScaleInTransformer())
    
支持访魅族样式
//单独设置OverlapSliderTransformer,项目里有,可以拷贝到项目中使用 kotlin实现的-。-
 .addPageTransformer(new OverlapSliderTransformer(banner.getViewPager2().getOrientation(), 0.25f, 0, 1,0))

关于ViewPager切换动画

pager2banner 只内置了 ScaleInTransformer ,这个比较常用。 demo里集成了以下两个ViewPager切换动画,请运行Sample查看动画效果,需要哪个拷贝到项目中用好了。

ViewPagerTransforms

MagicViewPager

介绍一下 IndicatorView

内置的indicator很强大,可以做到很多效果了,很灵活,可以运行demo尝试改变一下参数:

    .setIndicatorRatio(1f) //ratio,默认值是1 ,也就是说默认是圆点,根据这个值,值越大,拉伸越长,就成了矩形,小于1,就变扁了呗
    .setIndicatorRadius(2f) // radius 点的大小
    .setIndicatorSelectedRatio(3) 
    .setIndicatorSelectedRadius(2f)
    .setIndicatorStyle(IndicatorView.IndicatorStyle.INDICATOR_BIG_CIRCLE)       

如何自定义Indicator

/**
 * 可以实现该接口,自定义Indicator 可参考内置的{@link IndicatorView}
 */
public interface Indicator {

    /**
     * 当数据初始化完成时调用
     *
     * @param pagerCount pager数量
     */
    void initIndicatorCount(int pagerCount);

    /**
     * 返回一个View,添加到banner中
     */
    View getView();

    /**
     * banner是一个RelativeLayout,设置banner在RelativeLayout中的位置,可以是任何地方
     */
    RelativeLayout.LayoutParams getParams();
    
    void onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels);
    
    void onPageSelected(int position);
    
    void onPageScrollStateChanged(int state);
}

//举个栗子
public class IndicatorView extends View implements Indicator{
       
        @Override
        public void initIndicatorCount(int pagerCount) {
            this.pagerCount = pagerCount;
            setVisibility(pagerCount > 1 ? VISIBLE : GONE);
            requestLayout();
        }
    
        @Override
        public View getView() {
            return this;
        }
         /**
          * 控制Indicator在Banner中的位置,开发者自行实现
          */
        @Override
        public RelativeLayout.LayoutParams getParams() {
            if (params == null) {
                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 = dip2px(10);
            }
            return params;
        }
        /**
          * banner切换时同步回调的三个方法
          */
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            selectedPage = position;
            offset = positionOffset;
            invalidate();
        }
        
        @Override
        public void onPageSelected(int position) {
        }
        
        @Override
        public void onPageScrollStateChanged(int state) {
        }
}

Banner提供的方法介绍,banner未提供任何自定义属性

方法名 描述
addPageTransformer(ViewPager2.PageTransformer transformer) 设置viewpager2的自定义动画,支持多个添加
setOuterPageChangeListener(ViewPager2.OnPageChangeCallback listener) 设置viewpager2的滑动监听
setAutoTurningTime(long autoTurningTime) 设置自动轮播时长
setAutoPlay(boolean autoPlay) 设置是否自动轮播,大于1页可以轮播
setIndicator(Indicator indicator) 设置indicator
setIndicator(Indicator indicator, boolean attachToRoot) 设置indicator
setAdapter(@Nullable RecyclerView.Adapter adapter) 加载数据,此方法时开始轮播的方法,请再最后调用
setAdapter(@Nullable RecyclerView.Adapter adapter, int startPosition) 重载方法,设置轮播的起始位置
isAutoPlay() 是否无限轮播
getCurrentPager() 获取viewPager2当前位置
startTurning() 开始轮播
stopTurning() 停止轮播
setPageMargin(int multiWidth, int pageMargin) 设置一屏多页
setPageMargin(int leftWidth, int rightWidth, int pageMargin) 设置一屏多页,方法重载
setOffscreenPageLimit(int limit) 同viewPager2用法
setOrientation(@ViewPager2.Orientation int orientation) 设置viewpager2滑动方向
ViewPager2 getViewPager2() 获取viewpager2
RecyclerView.Adapter getAdapter() 获取apdater
setPagerScrollDuration(long pagerScrollDuration) 设置viewpager2的切换时长

内置IndicatorView使用方法介绍,没有提供任何自定义属性

方法名 描述
setIndicatorRadius(float indicatorRadius) 设置圆点半径
setIndicatorSpacing(float indicatorSpacing) 设置圆点间距
setIndicatorStyle(@IndicatorStyle int indicatorStyle) 设置圆点切换动画,内置五种切换动画,请参考Sample
setIndicatorColor(@ColorInt int indicatorColor) 设置默认的圆点颜色
setIndicatorSelectorColor(@ColorInt int indicatorSelectorColor) 设置选中的圆点颜色
setParams(RelativeLayout.LayoutParams params) 设置IndicatorView在banner中的位置,默认底部居中,距离底部10dp,请参考Sample
setIndicatorRatio(float indicatorRatio) 设置indicator比例,拉伸圆为矩形,设置越大,拉伸越长,默认1.0
setIndicatorSelectedRadius(float indicatorSelectedRadius) 设置选中的圆角,默认和indicatorRadius值一致,可单独设置选中的点大小
setIndicatorSelectedRatio(float indicatorSelectedRatio) 设置选中圆比例,拉伸圆为矩形,控制该比例,默认比例和indicatorRatio一致,默认值1.0

总结

xiexie ni de guāng gù ! 喜欢的朋友轻轻右上角赏个star,您的鼓励会给我持续更新的动力。

banner's People

Contributors

zguop avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

banner's Issues

暗黑模式切换

作者大大
我在执行 AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
进行暗黑模式切换后轮播卡顿,求解答

banner 上有视频播放器 会冲突的问题

作者好 , 我在首页banner 上面放着有 视频播放器, 那个banner库 重写了dispatchTouchEvent, 执行按下 暂停轮播,松开继续轮播的效果。。。和视频播放起冲突起来了,,, 点击视频播放器, 会浮现各个功能按钮出来嘛,, 现在 点下视频播放器,2S后 就自个儿轮播了。。。这个有什么好的解决办法没呀

循环拖动

请问博主,viewPager2 可以循环拖动,这个主要的控制代码是哪些? 想借鉴一下如何实现的,但是看了代码没有找到这部分

bug:自动播放时一次跳两页

startTurning 连续调用会导致 task 被重复执行,我这里表现的bug就是一次跳两页

解决办法:

public void stopTurning() {
        removeCallbacks(task);
}

改成:

private final Handler handler = new Handler(Looper.getMainLooper());
public synchronized void stopTurning() {
        handler.removeCallbacksAndMessages(null);
    }

设置指示器的圆点距离底部的距离问题;

    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

debug正常,而release打包异常

1.0.5中,如果debug正常,而release版本异常。可能是因为com.to.aboomy.pager2banner.Banner#initViewPagerScrollProxy()中使用了反射,需要增加相应混淆规则。

banner點擊兩側 position錯誤

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无法一直无限滑动

我写了Demo是没有问题的,可以一直划,但是加到项目中就不能无限滑动,使用的是com.to.aboomy.pager2banner.Banner,自己实现了recyclerviewadapter 轮播不同样式的布局.
比如我有3条数据,实际banner在左右各新增了一条,也就是这个库的实现原理,但是划到头的时候并没有切到最后一个,求解答

魅族 m2 e Android 6.0.1 崩溃

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時 ui error

當我輪播時
到第二輪 page 0
最右邊不會出現page1的畫面
而是會透到底層的fragment
原本的banner沒這個問題
.setPageMargin(UIUtil.dip2px(this, 20), UIUtil.dip2px(this, 10))

嵌套ViewPager2的一个小问题

把Banner嵌套在ViewPager里面,现在是Banner滑动完毕会触发外面嵌套的ViewPager的滑动。
如果可以,希望增加一个完全拦截滑动的设置,就是Banner滑动到最后一个再滑动,不会滑动外面的pager,而是把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)

混淆问题

开启了混淆后会有问题,设置间距无效,指示器不动,不能无限循环

BaseQuickAdapter get item

你好
再問一個問題
我的需求是
能在banner顯示時 再BaseQuickAdapter內執行ui上某件事
但我觀察convert是一次創好的
這樣我要如何才能抓到實際上position的view item?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.