亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ViewPager實現自動輪播和下方向導圓點

2019-11-08 00:15:39
字體:
來源:轉載
供稿:網友

代碼可以直接調用,使用. 效果圖,哪不懂可以直接評論問我/ 這里寫圖片描述 這里寫圖片描述

一’ 布局

小圓點形狀的生成shape.xml文件

使用空心還是實心的把對應的注釋去掉就可以了.

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:useLevel="false"> <!-- 實心圓 <solid android:color="#F00"/> --> <!-- 空心圓 <stroke android:width="1dp" android:color="@android:color/black"/> --> <size android:width="8dp" android:height="8dp"/></shape>

輪播的ViewPager和向導圓點的 布局文件XML

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="200dp"> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/hometab_vp" android:layout_width="match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" > <LinearLayout android:id="@+id/ll_dot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/shape_guide_dot_default"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:src="@drawable/shape_guide_dot_default"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:src="@drawable/shape_guide_dot_default"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:src="@drawable/shape_guide_dot_default"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:src="@drawable/shape_guide_dot_default"/> </LinearLayout> <ImageView android:id="@+id/dot_red" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/shape_guide_dot_solid"/> </RelativeLayout></RelativeLayout>

二,代碼

左右輪播的ViewPager的Adapter

/** * 輪播 viewpager的adapter */ class MyLoopPagerAdapter extends PagerAdapter { PRivate int[] welcomes; private Context mContext; public MyLoopPagerAdapter(int[] welcomes, Context context) { this.welcomes = welcomes; mContext = context; } // //返回實際要顯示的圖片數+2 @Override public int getCount() { return welcomes.length + 2; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView iv = new ImageView(mContext); int realPosition = (position - 1 + welcomes.length) % welcomes.length;// 設置背景圖片 iv.setBackgroundResource(welcomes[realPosition]); container.addView(iv); return iv; } @Override public void destroyItem(ViewGroup container, int position, Object object) { //注意不要remove 否則容易閃屏 // container.removeView((ImageView) object); } }

添加viewpager的addOnPageChangeListener

/** * 循環輪播界面change的 監聽器 */ class MyLoopPageChangeListener implements ViewPager.OnPageChangeListener { private ViewPager mViewPager; private LinearLayout mLlDot; private ImageView dotRed; private Handler mHandler; private TimerTask mTask; private Timer mTimer; private boolean isStop = false; /** * 初始化 控件 和 handler * * @param viewPager * @param llDot * @param dotRed */ public MyLoopPageChangeListener(ViewPager viewPager, LinearLayout llDot, ImageView dotRed) { mViewPager = viewPager; this.mLlDot = llDot; this.dotRed = dotRed; initAutoLoop(); } /** * 初始化 自動輪播 handler 和 runnable */ private void initAutoLoop() { mHandler = new Handler() { @Override public void handleMessage(Message msg) {// LogUtils.e("have received a msg"); int curindex = (mViewPager.getCurrentItem() + 1) % (welcomes.length + 2); mViewPager.setCurrentItem(curindex, true); } };// 開始輪播 startTimer(); } /** * 當頁面在滑動了調用 * * @param position 當前頁面,即點擊滑動的頁面 * @param positionOffset 當前頁面偏移的百分比 * @param positionOffsetPixels 當前頁面偏移的像素位置 */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {// 獲取到 真正圖片所在的位置. int realPosition = (position - 1 + welcomes.length) % welcomes.length;// 獲取到紅點 的 layout 參數 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) dotRed.getLayoutParams();// 計算兩個點之間的距離 int dotDis = mLlDot.getChildAt(1).getLeft() - mLlDot.getChildAt(0).getLeft();// 計算總共的左邊距 int totalLeftMargin = (welcomes.length - 1) * dotDis; // 計算滑動的距離 float dis = realPosition * dotDis + positionOffset * dotDis;// 設置 margin_left 的值,// 如果 position 等于 0 說明正在從第一個圖片想最后一個滑動,那么保持 向導的狀態為不動 if (position == 0) { params.leftMargin = 0;// 如果滑動距離超過了 最大邊距,那么將最大邊距賦值給 紅點的參數左邊距 } else if (dis > totalLeftMargin) { params.leftMargin = totalLeftMargin;// 正常情況 就將滑動的距離 直接賦值 } else { params.leftMargin = (int) dis; }// 設置紅點的 參數 dotRed.setLayoutParams(params);// 在position4左滑且左滑positionOffset百分比接近1時,偷偷替換為position1(原本會滑到position5) if (position == welcomes.length && positionOffset > 0.99) { mViewPager.setCurrentItem(1, false);// 在position1右滑且右滑百分比接近0時,偷偷替換為position4(原本會滑到position0) } else if (position == 0 && positionOffset < 0.01) { mViewPager.setCurrentItem(welcomes.length, false); } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { switch (state) { case 0://什么都沒做 空閑狀態 break; case 1://正在滑動:// 手動滑動 取消自動滑動 stopTimer(); break; case 2://滑動完畢:// 繼續 自動滑動 if (isStop) { startTimer(); isStop = false; } break; } } /** * 開啟輪播 */ private void startTimer(){ if (mTimer == null) { mTimer = new Timer(); } if (mTask == null) { mTask = new TimerTask() { @Override public void run() { // 輪播 mHandler.sendEmptyMessage(0); } }; } if(mTimer != null && mTask != null ) mTimer.schedule(mTask, 2000, 2000); } /** 停止輪播 * */ private void stopTimer() { if (mTimer != null) { mTimer.cancel(); mTimer = null; } if (mTask != null) { mTask.cancel(); isStop = true; mTask = null; } } }

// 主要的算法參考下圖 int realPosition = (position - 1 + welcomes.length) % welcomes.length; 由下圖可以發現,應該初始化ViewPager.setCurrentItem(1);才能從預設的第一頁開始播放。

這里寫圖片描述

部分代碼參考:http://blog.csdn.net/QQ_32199531/article/details/51817641?locationNum=2&fps=1 至于為什么getCount(),返回長度需要+2,詳見參考. 其中一些地方有所改動.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大片第1页| 国产一区二区黄| 国产精品一区电影| 成人a级免费视频| 国产99久久久欧美黑人| 日韩黄色在线免费观看| 国产精品99久久久久久人| 亚洲有声小说3d| 亚洲第一中文字幕| 国产亚洲免费的视频看| 国产97人人超碰caoprom| 欧美一级大胆视频| 91精品中国老女人| 欧美高跟鞋交xxxxxhd| 国产69精品久久久久9| 久久精品国产亚洲精品2020| 欧美亚洲日本网站| 国产亚洲美女精品久久久| 一区二区三区黄色| 国产精品揄拍一区二区| 国产欧美日韩中文字幕| 日韩欧美亚洲范冰冰与中字| 菠萝蜜影院一区二区免费| 国产亚洲精品美女久久久| 日本午夜在线亚洲.国产| 欧亚精品在线观看| 亚洲一区二区三区毛片| 日本一区二区三区四区视频| 亚洲偷欧美偷国内偷| 成人激情在线播放| 日韩av综合中文字幕| 中文字幕国产精品久久| 国产欧美精品一区二区三区介绍| 亚洲精品电影网在线观看| 精品国产精品三级精品av网址| 韩国日本不卡在线| 亚洲精品美女免费| 欧美日韩高清在线观看| 伊人伊人伊人久久| 亚洲成**性毛茸茸| 久久久久久久爱| 日韩成人免费视频| 久久在线精品视频| 国产精品久久久久久久7电影| 国模极品一区二区三区| 欧美大胆a视频| 欧美日韩亚洲国产一区| 2018中文字幕一区二区三区| 国产精品国产三级国产专播精品人| 欧美最顶级的aⅴ艳星| 中文字幕综合一区| 亚洲**2019国产| 欧美国产日韩一区| 日韩精品高清视频| 国产精品成人av性教育| 亚洲精品欧美一区二区三区| 在线观看欧美成人| 久久深夜福利免费观看| 91精品国产777在线观看| 欧美另类99xxxxx| 日韩欧美中文在线| 亚洲精品aⅴ中文字幕乱码| 国产999精品久久久影片官网| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久视频中文字幕| 中文字幕精品影院| 91精品国产综合久久香蕉的用户体验| 国产在线播放不卡| 国产精品三级网站| 国产中文日韩欧美| 好吊成人免视频| 伊人青青综合网站| 成人xxxx视频| 欧美在线观看网址综合| 国产精品嫩草影院久久久| 九九热精品视频国产| 欧美日韩裸体免费视频| 欧美日韩在线视频一区二区| 国产精品成人av性教育| 91精品国产91久久久久久| 国产亚洲美女精品久久久| 日韩亚洲欧美中文高清在线| 亚洲人成绝费网站色www| 欧美肥老妇视频| 人体精品一二三区| 91精品久久久久久久久中文字幕| 亚洲乱码国产乱码精品精天堂| 成人免费福利在线| 国产在线精品自拍| 久久精品视频一| 91av在线精品| 中文字幕精品一区久久久久| 欧美激情在线狂野欧美精品| 欧美成人免费va影院高清| 亚洲美女自拍视频| 国产福利精品视频| 欧美精品久久久久| 国产成人久久精品| 中文字幕欧美精品在线| 国产精品综合久久久| 久久亚洲精品成人| 亚洲一区二区三区四区在线播放| 欧美中文字幕在线视频| 亚洲成色999久久网站| 日韩视频永久免费观看| 在线国产精品视频| 成人疯狂猛交xxx| 日韩在线中文字| 亚洲午夜未删减在线观看| 国产在线精品一区免费香蕉| 国内精品在线一区| 精品久久久视频| 91视频88av| 国产精品高清免费在线观看| 日韩av中文字幕在线播放| 久久国产精品影视| 国产精品久久久久久久av电影| 亚洲色图13p| 岛国av一区二区在线在线观看| 57pao成人永久免费视频| 久久人人爽人人爽人人片亚洲| 国产性色av一区二区| 国产精品扒开腿做爽爽爽的视频| 国产精品丝袜一区二区三区| 中文字幕在线精品| 久久影视电视剧免费网站清宫辞电视| 91嫩草在线视频| 欧美日韩黄色大片| 日韩av成人在线观看| 欧美日韩国产成人在线观看| 欧美日韩亚洲国产一区| 国产成一区二区| 伊人久久男人天堂| 日韩av在线免费播放| 在线电影av不卡网址| 久久伊人精品一区二区三区| 久久久之久亚州精品露出| 国产精品亚洲精品| 国内精品久久久久| 成人在线视频网| 2019中文字幕在线| 欧美成人精品激情在线观看| 亚洲性69xxxbbb| 亚洲国产三级网| 亚洲在线观看视频网站| 国产精品视频xxxx| 国产精品欧美久久久| xvideos国产精品| 国产日韩在线免费| 亚洲专区在线视频| 亚洲欧美精品在线| 亚洲三级免费看| 国产精品一区二区久久国产| 欧美激情videoshd| 国产亚洲欧洲在线| 亚洲激情视频在线播放| 亚洲成人激情在线观看| 91精品久久久久久久久久另类| 国产成人精品视频| 国产精品男女猛烈高潮激情| 91成人在线观看国产| 亚洲女同性videos| 亚洲精品短视频| www.日韩不卡电影av|