LMBanners

介绍:

简易的Banners,引导组件。

运行效果:

使用说明:

原理说明

项目基于ViewPager实现,ViewPager使用方式不用多说。

需求1:如何循环播放?

实现方式采用假设当前Pager总页数为X,假设页数为Y页, 首次进入处于0页,向右滑动自然没问题,向左滑时候0------1,显然不成立,此时可在finshUpdate函数中手动将第0页的下标变为X,如此我们的 ViewPager即可向左滑动.但是当向右的时候呢?原理一样,当下标为X的时候,将其替换为0即可。

需求2:如何自动播放?

其实这对于稍微有点经验的人来说不算难点了,方式很多。本项目采用handler的方式,每次切换进行一次发送即可,在页面切换时记得Stop,回来 继续Start,页面销毁时进行Remove即可。

需求3:手指按住或者拖动时如何停止滑动。

本项目采用在ViewPager的dispatch进行事件分发的拦截处理。 当然也可以手动去处理Image的Ontouch事件。

Gradle引与使用

Gradle:

dependencies {
  compile 'com.allure0:LMBanners:1.0.2'
}

使用方法

Config in xml:

 <com.allure.lbanners.LMBanners
            android:id="@+id/banners"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:canLoop="true"
            app:isVertical="false"
            app:auto_play="true"
            app:durtion="5000"
            app:scroll_duration="66666"
            app:indicator_select="@drawable/page_indicator_select"
            app:indicator_unselect="@drawable/page_indicator_unselect"
            app:horizontal_transitionEffect="accordion"
            app:indicator_position="bottom_mid"
            >
        </com.allure.lbanners.LMBanners>

Config in Java:

 mLBanners = (LMBanners) findViewById(R.id.banners);
        //设置Banners高度
        mLBanners.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ScreenUtils.dip2px(this, 200)));
        //本地用法
//        mLBanners.setAdapter(new LocalImgAdapter(MainActivity.this),localImages);
        //网络图片
        mLBanners.setAdapter(new UrlImgAdapter(MainActivity.this), networkImages);
        //参数设置
        mLBanners.setAutoPlay(true);//自动播放
        mLBanners.setVertical(false);//是否可以垂直
        mLBanners.setScrollDurtion(222);//两页切换时间
        mLBanners.setCanLoop(true);//循环播放
        mLBanners.setSelectIndicatorRes(R.drawable.page_indicator_select);//选中的原点
        mLBanners.setUnSelectUnIndicatorRes(R.drawable.page_indicator_unselect);//未选中的原点
//        mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Default);//选中喜欢的样式
        mLBanners.setHoriZontalCustomTransformer(new ParallaxTransformer(R.id.id_image));//自定义样式
        mLBanners.setDurtion(2000);//切换时间
        mLBanners.hideIndicatorLayout();//隐藏原点
        mLBanners.showIndicatorLayout();//显示原点
        mLBanners.setIndicatorPosition(LMBanners.IndicaTorPosition.BOTTOM_MID);//设置原点显示位置
        //停止事件,节省资源
         @Override
    protected void onPause() {
        super.onPause();
        mLBanners.stopImageTimerTask();
    }
    @Override
    protected void onResume() {
        super.onResume();
        mLBanners.startImageTimerTask();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mLBanners.clearImageTimerTask();
    }
    /-------------Adapter-----------/
     @Override
    public View getView(final LMBanners lBanners, final Context context, int position, String data) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item, null);
        ImageView imageView = (ImageView) view.findViewById(R.id.id_image);
        //可行选择喜欢的图片加载库。
        ImageLoader.getInstance().displayImage(data,imageView);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
        return view;
    }

注意事项

纵向播放时暂只支持一种效果(后续可能增加) 使用纵向播放后代码不要设置setHoriZontalTransitionEffect()、setHoriZontalCustomTransformer() XML内不要调用自定义属性horizontal_transitionEffect

已下载
0