仿转转首页banner

可独立拆分使用,设置属性可变为普通banner,修改如需特殊要求可修改源码item_banner.xml布局即可(图片资源在文末)

  • 具体效果


    效果
  • 底部背景图片随着banner滚动实现reveal效果
    banner上层图片缩放效果

实现原理

  • 上层banner用viewPager实现,通过handler定时发送消息实现可循环自动播放的banner
  • 下层背景图片通过多张图片折叠,然后通过viewPager滚动监听来操作底部图片的显示和隐藏
  • 缩放动画用属性动画实现,根据viewPager滑动停止和移动判断是否放大或缩小

特性

  • 可独立拆分使用,设置属性可变为普通banner,修改如需特殊要求可修改源码item_banner.xml布局即可

在 app的build.gradle 里面引用

implementation 'com.tokiii:reveal-banner:1.0.0'

2、写布局


    <com.wikikii.bannerlib.banner.view.BannerBgContainer
        android:id="@+id/banner_bg_container"
        android:layout_width="match_parent"
        android:layout_height="240dp" />


    <com.wikikii.bannerlib.banner.LoopLayout
        android:id="@+id/loop_layout"
        android:layout_width="match_parent"
        android:layout_marginTop="@dimen/qb_px_80"
        android:layout_height="168dp"
        android:layout_gravity="bottom" />

3、实现代码

        bannerBgContainer = (BannerBgContainer) inflate.findViewById (R.id.banner_bg_container);
        loopLayout = (LoopLayout) inflate.findViewById (R.id.loop_layout);

        loopLayout.setLoop_ms (3000);//轮播的速度(毫秒)
        loopLayout.setLoop_duration (400);//滑动的速率(毫秒)
        loopLayout.setScaleAnimation (true);// 设置是否需要动画
        loopLayout.setLoop_style (LoopStyle.Depth);//轮播的样式-默认empty
        loopLayout.setIndicatorLocation (IndicatorLocation.Center);//指示器位置-中Center
        loopLayout.initializeData (getActivity ());
        
        // 准备数据
        ArrayList<BannerInfo> bannerInfos = new ArrayList<> ();
        List<Object> bgList = new ArrayList<> ();
        bannerInfos.add (new BannerInfo (R.mipmap.banner_1, "first"));
        bannerInfos.add (new BannerInfo (R.mipmap.banner_2, "second"));
        bgList.add (R.mipmap.banner_bg1);
        bgList.add (R.mipmap.banner_bg2);
        // 设置监听
        loopLayout.setOnLoadImageViewListener (new OnDefaultImageViewLoader () {
            @Override
            public void onLoadImageView(ImageView view, Object object) {
                Glide.with (view.getContext ())
                        .load (object)
                        .into (view);
            }
        });
        loopLayout.setOnBannerItemClickListener (this);
        if (bannerInfos.size () == 0) {
            return;
        }
        loopLayout.setLoopData (bannerInfos);
        bannerBgContainer.setBannerBackBg (getActivity (), bgList);
        loopLayout.setBannerBgContainer (bannerBgContainer);
        loopLayout.startLoop ();
    }

    @Override
    public void onBannerClick(int index, ArrayList<BannerInfo> banner) {

    }

    void setFullScreen() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getActivity ().getWindow ();
            // Translucent status bar
            window.setFlags (
                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getActivity ().getWindow ();
            window.clearFlags (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            window.getDecorView ().setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags (WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor (Color.TRANSPARENT);
        }

图片

banner_1.png
banner_2.png
banner_bg1.png
banner_bg2.png

转载至tokiii

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 代码地址:Github 效果由来 我司设计一向比较喜欢高大上的东西(我也喜欢...),无意中看到转转首页banne...
    卷卷更健康阅读 10,317评论 19 60
  • 实现效果 当banner滚动的时候 首先会缩放当前以及上一个或下一个banner图, 当banner滚动时会,背景...
    z小志阅读 46,651评论 60 76
  • [仿转转首页Banner图(https://www.jianshu.com/p/512d48b82997)
    nadou23阅读 507评论 0 0
  • Banner 基本上所有的App首页都包含一个轮播器,一般称之为Banner。通过这一个组件可以实现以下几个功能:...
    狮_子歌歌阅读 1,613评论 0 2
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,101评论 1 32