android-auto-scroll-view-pager (无限广告轮播图)

github 地址: https://github.com/Trinea/android-auto-scroll-view-pager

Gradle:

compile (‘cn.trinea.android.view.autoscrollviewpager:android-auto-scroll-view-pager:1.1.2‘) {
    exclude module: ‘support-v4‘
}
-keep class cn.trinea.android.** { *; }
-keepclassmembers class cn.trinea.android.** { *; }
-dontwarn cn.trinea.android.**

布局文件

         <cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager
                 android:id="@+id/auto_view_pager"
                 android:layout_width="match_parent"
                 android:layout_height="320dp" />
             <LinearLayout
                 android:id="@+id/point_group"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_horizontal"
                 android:gravity="center"
                 android:layout_alignParentBottom="true"
                 android:orientation="horizontal"
                 android:paddingBottom="5dp"
                 >

代码设置:

        if(imageList.size()==1){
         auto_view_pager.stopAutoScroll();
        }
        auto_view_pager.setAdapter(new MyAdapter(imageList));
//
        //设置延时时间
        auto_view_pager.setInterval(5000);
        //设置轮播的方向 AutoScrollViewPager.RIGHT/AutoScrollViewPager.LEFT
        auto_view_pager.setDirection(AutoScrollViewPager.RIGHT);
        //设置是否自动循环轮播,默认为true
        //注意:一旦设为true,则不能和ViewPagerIndicator一起使用
          auto_view_pager.setCycle(true);
        //设置切换动画的时长
        auto_view_pager.setScrollDurationFactor(5);
        //设置当滑动到最后一个或者第一个时,如何切换下一张

        //当滑动到最后一张或第一张时是否开启动画,默认为true
        auto_view_pager.setBorderAnimation(true);
        //当触摸的时候,停止轮播
        auto_view_pager.setStopScrollWhenTouch(true);

//
//        //解决最后一个跳转到第一个闪动问题
//         auto_view_pager.setCurrentItem((Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % imageList.size()));

        auto_view_pager.setCurrentItem(imageList.size()*10);

        final LinearLayout point_group = (LinearLayout)
                 findViewById(R.id.point_group);
        point_group.removeAllViews();
        for (int i = 0; i < imageList.size(); i++) {
            // 添加指示点
            ImageView point = new ImageView(DetailActivity.this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            params.rightMargin = 10;

            point.setLayoutParams(params);
            point.setBackgroundResource(R.drawable.point_bg);
            if (i == 0) {
                point.setEnabled(true);
            } else {
                point.setEnabled(false);
            }
            point_group.addView(point);

        }

//
         auto_view_pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }
                @Override
                public void onPageSelected(int position) {
                    Log.e("TAG", "position" + position);
                    // 改变指示点的状态
                    // 把当前点enbale 为true
                    try {
                        point_group.getChildAt(position % imageList.size()).setEnabled(true);
                        // 把上一个点设为false
                        point_group.getChildAt(lastPosition).setEnabled(false);
                        lastPosition = position % imageList.size();
                    } catch (Exception e) {
                    }
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });

adapter

    class MyAdapter extends PagerAdapter {

         List<String> mSimpleDraweeViewList;
        public MyAdapter(List<String> mSimpleDraweeViewList) {
            this.mSimpleDraweeViewList=mSimpleDraweeViewList;
        }

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            Uri uri = Uri.parse(HttpBase.HOST_STRING +"/"+ mSimpleDraweeViewList.get(position % mSimpleDraweeViewList.size()));
//            SimpleDraweeView draweeView = new SimpleDraweeView(DetailActivity.this);
            SimpleDraweeView draweeView = (SimpleDraweeView)View.inflate(DetailActivity.this,R.layout.layout_image,null).findViewById(R.id.image1);
            draweeView.setScaleType( ImageView.ScaleType.FIT_XY);
            ViewGroup.LayoutParams imagebtn_params = new ViewGroup.LayoutParams(
                    AutoUtils.getDisplayWidthValue(720), AutoUtils.getDisplayHeightValue(640));
            draweeView.setLayoutParams(imagebtn_params);

            draweeView.setImageURI(uri);
//            ImageView im= new ImageView(DetailActivity.this);
//            Picasso.with(DetailActivity.this).load(HttpBase.HOST_STRING +"/"+ mSimpleDraweeViewList.get(position % mSimpleDraweeViewList.size())).into(im);

            ViewParent parent = draweeView.getParent();
            // remove掉View之前已经加到一个父控件中,否则报异常
            if (parent != null) {
                ViewGroup group = (ViewGroup) parent;
                group.removeView(draweeView);
            }
            container.addView(draweeView);
            return draweeView;
//            container.addView(images.get(position % images.size()));
//            return images.get(position % images.size());
//            container.addView(draweeView);
//          return draweeView;
        }

    }
    @Override
    protected void onResume() {
        super.onResume();
        //开启自动轮播,延时时间为getInterval()

        auto_view_pager.startAutoScroll();
        //开启自动轮播,并设置延时
//        auto_view_pager.startAutoScroll(delayTime);
    }

    @Override
    protected void onPause() {
        super.onPause();
        //停止轮播
        auto_view_pager.stopAutoScroll();
    }

point_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/point_nomal"  android:state_enabled="true"/>
    <item android:drawable="@drawable/point_focured"  android:state_enabled="false"/>

</selector>

point_focured.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <size  android:width="5dp" android:height="5dp"/>
    <solid android:color="#33000000"/>

</shape>

point_nomal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <size  android:width="5dp" android:height="5dp"/>
    <solid android:color="#aaFFFFFF"/>

</shape>
时间: 2024-10-28 05:32:23

android-auto-scroll-view-pager (无限广告轮播图)的相关文章

Android无限广告轮播 - 自定义BannerView

1.概述 这其实是我第一篇想写的博客,可能是因为我遇到了太多的坑,那个时候刚入行下了很多Demo发现怎么也改不动,可能是能力有限,这次就做一个具体的实现和彻底的封装. 上次讲了Android无限广告轮播-ViewPager源码分析,有了源码分析我们对ViewPager就有了一个大概的了解,那么再来封装成自定义View,就会简单许多,附视频讲解地址:http://pan.baidu.com/s/1bpqqkGn 2.效果封装 2.1 自定义BannerViewPager extends ViewP

猫猫学iOS 之广告轮播图,collectionView制作

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 效果图 不多说,好不好先看效果,之前做过一个scrollView的轮播图,但是很局限,很多多余代码,今天猫猫重新做了一个用collectionView的流水布局做的一个,可以拿去做广告轮播,也可以做系统新特性哦,来,看下效果吧. 源码共享:https://github.com/znycat/NYCarouselView 很久很久以前就想做了.总而言之,猫猫代码有

android中广告轮播图总结

功能点:无限轮播.指示点跟随.点击响应.实现思路: 1.指示点跟随,指示点通过代码动态添加,数量由图片数量决定. 在viewpager的页面改变监听中,设置点的状态选择器enable,当前页时,setEnable(true),非当前页设置为false.由于图片是从网络获取,数量不定,所以此处不能使用switch写死,需要设置变量记录当前和前一个.代码如下: llAddPoint为添加指示点的线性布局 prePosition为前一个位置,初始化时设为0,newPosition为当前位置 int n

android项目实战 --ListView 头部ViewPager广告轮询图效果

看开源框架:https://github.com/tianshaojie/AndroidFine,里面有如下效果,特记录学习下,以后项目中用也好能够立刻想起来.   如上面所示,是常见项目中的图片轮训和展示效果,技术主要涉及到viewpager+photoview,那下面主要讲解如何在android App中如何实现该效果: 导入photoview相关代码: 2.   头部轮训和展示的代码: 第1个页面的实现: 首先看布局: activity_photoview.xml文件 <?xml vers

自定义View之无限大图轮播ShufBanner

无限大图轮播–ShufBanner 轮播图作为一个app的宣传,展示等,往往占据着一个很重要的地位,大部分app都将其放在首页.那么通常的做法都是使用ViewPager,使其能够作用滑动,而无限轮播无外乎两种做法. - 第一种是将ViewPager的size定义为无限大,定义其初始显示的位置为中间,这样的话因为左或者右都有很多的页面,所以造成了一种可以无限轮播的假象.同时因为ViewPager的特性,其只是加载当前显示page以及左和右的三个页面,不用担心OOM. - 第二种是,将ViewPag

猫猫学iOS 之广告轮播图,collectionView制作(源码)

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 源码共享:https://github.com/znycat/NYCarouselView 效果图 源代码 NYCarouselView.h // // NYCarouselView.h // 广告轮播CollectionView // // Created by IOS on 15/12/26. // Copyright ? 2015年 com.itcat.c

JavaScripts广告轮播图以及定时弹出和定时隐藏广告

轮播图: 函数绑定在body标签内 采用3张图,1.jpg   2.jpg  3.jpg  利用定时任务执行设置图片属性 src  利用for循环可以完成3秒一次 一替换. 定时弹出广告: 由于body标签已经绑定了函数 所以直接用 window 加载事件 函数 广告图片的默认display属性是none 3秒后将广告图片的 display属性 设置成block  就可以形成3秒后显示广告图片 弹出后 需要清理定时 然后在写一个3秒定时 隐藏的函数 ,最后也要清理定时. <script> fu

预约挂号系统之首页广告轮播图

轮播图设计 <div id="main_top_left"> <div id="list" style="left: -650px;"> <img src="../img/slideshow_5.jpg" alt="5"/> <img src="../img/slideshow_1.jpg" alt="1"/> <

jquery 广告轮播图

轮播图 /*轮播图基本功能: * 1图片切换 * 1.1图片在中间显示 * 1.2图片淡入淡出 * 2左右各有一个按钮 * 2.1点击左按钮,图片切换上一张 * 2.2点击右按钮,图片切换下一张 * 2.3鼠标滑过按钮,按钮颜色加深 * 3底部的导航点 * 3.1图片为第几张时,点在那第几张 * 3.2鼠标滑到第几个点,图片切换到第几张 * 4图片自动轮播 * 4.1默认自动下一张 * 4.2鼠标在图片范围时,停止切换 * 4.3鼠标离开图片范围,恢复自动切换 * 5鼠标放在图片范围时,变为小手