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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM