国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android實現(xiàn)圖片自動輪播并且支持手勢左右無限滑動

2019-12-12 05:05:01
字體:
供稿:網(wǎng)友

廢話不多說了,先給大家上左右無限滑動的代碼了。

1.左右無限滑動

public class MainActivity extends AppCompatActivity {private static ViewPager viewPager;private RadioGroup group;//圖片資源,實際項目需要從網(wǎng)絡(luò)獲取private int[] imageIds = {R.drawable.ym1, R.drawable.ym2, R.drawable.ym3, R.drawable.ym4};//存放圖片的數(shù)組private List<ImageView> mList;//當(dāng)前索引位置以及上一個索引位置private static int index = 0, preIndex = 0;//是否需要輪播標(biāo)志private boolean isContinue = true;//定時器,用于實現(xiàn)輪播private Timer timer = new Timer();private MyHandler mHandler;public static class MyHandler extends Handler {private WeakReference<MainActivity> weakReference;public MyHandler(MainActivity activity) {weakReference = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {if (weakReference.get() != null) {index++;viewPager.setCurrentItem(index);}super.handleMessage(msg);}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();addListener();//讓當(dāng)前圖片位于中間某個位置,目的就是為了開始能夠左滑viewPager.setCurrentItem(imageIds.length * 100);initRadioButton(imageIds.length);//注意這句和上面那句順序不能寫反,否則會出現(xiàn)第一個圓點無法顯示選中狀態(tài)startSwitch();}/*** 初始化控件*/public void initView() {viewPager = (ViewPager) findViewById(R.id.viewpager);group = (RadioGroup) findViewById(R.id.group);}/*** 初始化數(shù)據(jù)*/public void initData() {mList = new ArrayList<>();viewPager.setAdapter(pagerAdapter);mHandler = new MyHandler(this);}/*** 添加監(jiān)聽*/public void addListener() {viewPager.addOnPageChangeListener(onPageChangeListener);viewPager.setOnTouchListener(onTouchListener);}/*** 進行圖片輪播*/public void startSwitch() {//執(zhí)行定時任務(wù)timer.schedule(new TimerTask() {@Overridepublic void run() {//首先判斷是否需要輪播,是的話我們才發(fā)消息if (isContinue) {mHandler.sendEmptyMessage(1);}}}, 3000, 3500);//延遲3秒,每隔3.5秒發(fā)一次消息;}/*** 根據(jù)圖片個數(shù)初始化按鈕* @param length 圖片所在集合長度*/private void initRadioButton(int length) {for (int i = 0; i < length; i++) {ImageView imageview = new ImageView(this);imageview.setImageResource(R.drawable.rg_selector);//設(shè)置背景選擇器imageview.setPadding(20, 0, 0, 0);//設(shè)置每個按鈕之間的間距//將按鈕依次添加到RadioGroup中g(shù)roup.addView(imageview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);//默認(rèn)選中第一個按鈕,因為默認(rèn)顯示第一張圖片group.getChildAt(0).setEnabled(false);}}/*** 根據(jù)當(dāng)前觸摸事件判斷是否要輪播*/View.OnTouchListener onTouchListener = new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {//手指按下和劃動的時候停止圖片的輪播case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE:isContinue = false;break;default:isContinue = true;}return false;//注意這里只能返回false,如果返回true,Dwon就會消費掉事件,MOVE無法獲得事件,// 導(dǎo)致圖片無法滑動}};/*** 根據(jù)當(dāng)前選中的頁面設(shè)置按鈕的選中*/ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {index = position;//當(dāng)前位置賦值給索引setCurrentDot(index % imageIds.length);//因為只有四個按鈕,所以我們在此要對長度區(qū)域,保證范圍在0到4}@Overridepublic void onPageScrollStateChanged(int state) {}};/*** 設(shè)置對應(yīng)位置按鈕的狀態(tài)* @param i 當(dāng)前位置*/private void setCurrentDot(int i) {if (group.getChildAt(i) != null) {group.getChildAt(i).setEnabled(false);//當(dāng)前按鈕選中,顯示藍(lán)色}if (group.getChildAt(preIndex) != null) {group.getChildAt(preIndex).setEnabled(true);//上一個取消選中。顯示灰色preIndex = i;//當(dāng)前位置變?yōu)樯弦粋€,繼續(xù)下次輪播}}PagerAdapter pagerAdapter = new PagerAdapter() {@Overridepublic int getCount() {//返回一個比較大的值,目的是為了實現(xiàn)無限輪播return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {position = position % imageIds.length;//因為position非常大,而我們需要的position不能大于圖片集合長度//所以在此取余ImageView imageView = new ImageView(MainActivity.this);imageView.setImageResource(imageIds[position]);imageView.setScaleType(ImageView.ScaleType.FIT_XY);container.addView(imageView);mList.add(imageView);return imageView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// 注意在此不要做任何操作,因為我們需要實現(xiàn)向左滑動,否則會產(chǎn)生IndexOutOfBoundsException}};@Overrideprotected void onDestroy() {super.onDestroy();//頁面銷毀的時候取消定時器if (timer != null) {preIndex = 0;timer.cancel();}}}

2.單向滑動

public class MainActivity extends AppCompatActivity {private static ViewPager viewPager;private RadioGroup group;//圖片資源,實際項目需要從網(wǎng)絡(luò)獲取private int[] imageIds = {R.drawable.ym1, R.drawable.ym2, R.drawable.ym3, R.drawable.ym4};//存放圖片的數(shù)組private List<ImageView> mList;//當(dāng)前索引位置以及上一個索引位置private static int index = 0, preIndex = 0;//是否需要輪播標(biāo)志private boolean isContinue = true;//定時器,用于實現(xiàn)輪播private Timer timer = new Timer();private MyHandler mHandler;public static class MyHandler extends Handler {private WeakReference<MainActivity> weakReference;public MyHandler(MainActivity activity) {weakReference = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {if (weakReference.get() != null) {index++;viewPager.setCurrentItem(index);}super.handleMessage(msg);}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();addListener();initRadioButton(imageIds.length);startSwitch();}/*** 初始化控件*/public void initView() {viewPager = (ViewPager) findViewById(R.id.viewpager);group = (RadioGroup) findViewById(R.id.group);}/*** 初始化數(shù)據(jù)*/public void initData() {mList = new ArrayList<>();viewPager.setAdapter(pagerAdapter);mHandler = new MyHandler(this);}/*** 添加監(jiān)聽*/public void addListener() {viewPager.addOnPageChangeListener(onPageChangeListener);viewPager.setOnTouchListener(onTouchListener);}/*** 進行圖片輪播*/public void startSwitch() {//執(zhí)行定時任務(wù)timer.schedule(new TimerTask() {@Overridepublic void run() {//首先判斷是否需要輪播,是的話我們才發(fā)消息if (isContinue) {mHandler.sendEmptyMessage(1);}}}, 3000, 3500);//延遲3秒,每隔3.5秒發(fā)一次消息;}/*** 根據(jù)圖片個數(shù)初始化按鈕* @param length 圖片所在集合長度*/private void initRadioButton(int length) {for (int i = 0; i < length; i++) {ImageView imageview = new ImageView(this);imageview.setImageResource(R.drawable.rg_selector);//設(shè)置背景選擇器imageview.setPadding(20, 0, 0, 0);//設(shè)置每個按鈕之間的間距//將按鈕依次添加到RadioGroup中g(shù)roup.addView(imageview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);//默認(rèn)選中第一個按鈕,因為默認(rèn)顯示第一張圖片group.getChildAt(0).setEnabled(false);}}/*** 根據(jù)當(dāng)前觸摸事件判斷是否要輪播*/View.OnTouchListener onTouchListener = new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {//手指按下和劃動的時候停止圖片的輪播case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE:isContinue = false;break;default:isContinue = true;}return false;//注意這里只能返回false,如果返回true,Dwon就會消費掉事件,MOVE無法獲得事件,// 導(dǎo)致圖片無法滑動}};/*** 根據(jù)當(dāng)前選中的頁面設(shè)置按鈕的選中*/ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {index = position;//當(dāng)前位置賦值給索引setCurrentDot(index % imageIds.length);//因為只有四個按鈕,所以我們在此要對長度區(qū)域,保證范圍在0到4}@Overridepublic void onPageScrollStateChanged(int state) {}};/*** 設(shè)置對應(yīng)位置按鈕的狀態(tài)* @param i 當(dāng)前位置*/private void setCurrentDot(int i) {if (group.getChildAt(i) != null) {group.getChildAt(i).setEnabled(false);//當(dāng)前按鈕選中,顯示藍(lán)色}if (group.getChildAt(preIndex) != null) {group.getChildAt(preIndex).setEnabled(true);//上一個取消選中。顯示灰色preIndex = i;//當(dāng)前位置變?yōu)樯弦粋€,繼續(xù)下次輪播}}PagerAdapter pagerAdapter = new PagerAdapter() {@Overridepublic int getCount() {//返回一個比較大的值,目的是為了實現(xiàn)無限輪播return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {position = position % imageIds.length;//因為position非常大,而我們需要的position不能大于圖片集合長度//所以在此取余ImageView imageView = new ImageView(MainActivity.this);imageView.setImageResource(imageIds[position]);imageView.setScaleType(ImageView.ScaleType.FIT_XY);container.addView(imageView);mList.add(imageView);return imageView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(mList.get(position));}};@Overrideprotected void onDestroy() {super.onDestroy();//頁面銷毀的時候取消定時器if (timer != null) {preIndex = 0;index = 0;timer.cancel();}}}

3.加入一張圖片的判斷(最終版)

public class MainActivity extends AppCompatActivity {private static ViewPager viewPager;private RadioGroup group;//圖片資源,實際項目需要從網(wǎng)絡(luò)獲取// private int[] imageIds = {R.drawable.ym1, R.drawable.ym2, R.drawable.ym3, R.drawable.ym4};private int[] imageIds = {R.drawable.ym1};//存放圖片的數(shù)組private List<ImageView> mList;//當(dāng)前索引位置以及上一個索引位置private static int index = 0, preIndex = 0;//是否需要輪播標(biāo)志private boolean isContinue = true;//定時器,用于實現(xiàn)輪播private Timer timer = new Timer();private MyHandler mHandler;public static class MyHandler extends Handler {private WeakReference<MainActivity> weakReference;public MyHandler(MainActivity activity) {weakReference = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {if (weakReference.get() != null) {index++;viewPager.setCurrentItem(index);}super.handleMessage(msg);}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();addListener();initRadioButton(imageIds.length);//注意這句和上面那句順序不能寫反,否則會出現(xiàn)第一個圓點無法顯示選中狀態(tài)startSwitch();}/*** 初始化控件*/public void initView() {viewPager = (ViewPager) findViewById(R.id.viewpager);group = (RadioGroup) findViewById(R.id.group);}/*** 初始化數(shù)據(jù)*/public void initData() {mList = new ArrayList<>();viewPager.setAdapter(pagerAdapter);mHandler = new MyHandler(this);}/*** 添加監(jiān)聽*/public void addListener() {viewPager.addOnPageChangeListener(onPageChangeListener);viewPager.setOnTouchListener(onTouchListener);}/*** 進行圖片輪播*/public void startSwitch() {//執(zhí)行定時任務(wù)timer.schedule(new TimerTask() {@Overridepublic void run() {//首先判斷是否需要輪播,是的話我們才發(fā)消息if (isContinue) {if(imageIds.length!=1)//多于一張圖片才輪播mHandler.sendEmptyMessage(1);}}}, 3000, 3500);//延遲3秒,每隔3.5秒發(fā)一次消息;}/*** 根據(jù)圖片個數(shù)初始化按鈕* @param length 圖片所在集合長度*/private void initRadioButton(int length) {for (int i = 0; i < length; i++) {ImageView imageview = new ImageView(this);if(length == 1){imageview.setVisibility(View.GONE);return;}imageview.setImageResource(R.drawable.rg_selector);//設(shè)置背景選擇器imageview.setPadding(20, 0, 0, 0);//設(shè)置每個按鈕之間的間距//將按鈕依次添加到RadioGroup中g(shù)roup.addView(imageview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);//默認(rèn)選中第一個按鈕,因為默認(rèn)顯示第一張圖片group.getChildAt(0).setEnabled(false);}}/*** 根據(jù)當(dāng)前觸摸事件判斷是否要輪播*/View.OnTouchListener onTouchListener = new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {//手指按下和劃動的時候停止圖片的輪播case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE:isContinue = false;break;default:isContinue = true;}if(imageIds.length == 1){return true;//1張圖片不允許滑動}return false;//注意這里只能返回false,如果返回true,Dwon就會消費掉事件,MOVE無法獲得事件,// 導(dǎo)致圖片無法滑動}};/*** 根據(jù)當(dāng)前選中的頁面設(shè)置按鈕的選中*/ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {index = position;//當(dāng)前位置賦值給索引setCurrentDot(index % imageIds.length);//因為只有四個按鈕,所以我們在此要對長度區(qū)域,保證范圍在0到4}@Overridepublic void onPageScrollStateChanged(int state) {}};/*** 設(shè)置對應(yīng)位置按鈕的狀態(tài)* @param i 當(dāng)前位置*/private void setCurrentDot(int i) {if (group.getChildAt(i) != null) {group.getChildAt(i).setEnabled(false);//當(dāng)前按鈕選中,顯示藍(lán)色}if (group.getChildAt(preIndex) != null) {group.getChildAt(preIndex).setEnabled(true);//上一個取消選中。顯示灰色preIndex = i;//當(dāng)前位置變?yōu)樯弦粋€,繼續(xù)下次輪播}}PagerAdapter pagerAdapter = new PagerAdapter() {@Overridepublic int getCount() {//返回一個比較大的值,目的是為了實現(xiàn)無限輪播return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {position = position % imageIds.length;//因為position非常大,而我們需要的position不能大于圖片集合長度//所以在此取余ImageView imageView = new ImageView(MainActivity.this);imageView.setImageResource(imageIds[position]);imageView.setScaleType(ImageView.ScaleType.FIT_XY);container.addView(imageView);mList.add(imageView);return imageView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// 注意在此不要做任何操作,因為我們需要實現(xiàn)向左滑動,否則會產(chǎn)生IndexOutOfBoundsExceptioncontainer.removeView(mList.get(position));}};@Overrideprotected void onDestroy() {super.onDestroy();//頁面銷毀的時候取消定時器if (timer != null) {preIndex = 0;index = 0;timer.cancel();}}}

以上所述是小編給大家介紹的Android實現(xiàn)圖片自動輪播并且支持手勢左右無限滑動,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 太原市| 饶平县| 张掖市| 阿巴嘎旗| 崇州市| 磴口县| 镇平县| 安国市| 拉萨市| 黑龙江省| 和平县| 松阳县| 启东市| 玛纳斯县| 夏津县| 敦化市| 深水埗区| 栾川县| 新巴尔虎左旗| 广东省| 桐梓县| 秦安县| 古浪县| 德江县| 寿光市| 柳林县| 台南县| 海林市| 隆林| 花莲县| 铜梁县| 阳泉市| 沙河市| 宣城市| 嘉禾县| 阆中市| 安阳县| 汾西县| 陵水| 博兴县| 福建省|