仿转转首页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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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