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>
