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>

 

posted @ 2016-07-21 14:05  每天学习一点点...  阅读(2125)  评论(1编辑  收藏  举报