viewpager實現(xiàn)自動循環(huán)輪播圖
更新時間:2021年01月02日 13:02:18 作者:" 霎那凝眸,三生不忘゛
這篇文章主要為大家詳細介紹了viewpager實現(xiàn)自動循環(huán)輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了viewpager自動循環(huán)輪播圖的具體代碼,供大家參考,具體內(nèi)容如下
布局文件
android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.viewpager.widget.ViewPager android:id="@+id/vp_adv" android:layout_width="match_parent" android:layout_height="160dp"/> <LinearLayout android:id="@+id/View_indicator" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/vp_adv" android:layout_marginTop="-25dp" android:orientation="horizontal" android:gravity="right"> </LinearLayout> </RelativeLayout> </LinearLayout>
核心代碼
public class MainActivity extends AppCompatActivity { private ImageView indicator;//表示圓點指示器 private ImageView [] indicators;//保存圓點指示器的數(shù)組 private boolean iscontinue = true; private ViewPager viewPager; private ViewGroup viewGroup; private ArrayList<Fragment> fragments; List<Integer> imgs = null; private AtomicInteger index = new AtomicInteger(); private Handler viewHandler= new Handler(){ @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); viewPager.setCurrentItem(msg.what); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } public void initView(){ viewPager=findViewById(R.id.vp_adv); viewGroup=findViewById(R.id.View_indicator); //四張廣告圖片加載到集合中進行保存 List<View> listPics = new ArrayList<>(); ImageView img1 = new ImageView(this); img1.setBackgroundResource(R.mipmap.food1); listPics.add(img1); ImageView img2 = new ImageView(this); img1.setBackgroundResource(R.mipmap.shop2); listPics.add(img2); ImageView img3 = new ImageView(this); img1.setBackgroundResource(R.mipmap.shop3); listPics.add(img3); ImageView img4 = new ImageView(this); img1.setBackgroundResource(R.mipmap.shop4); listPics.add(img4); initFragments(); //動態(tài)設置四個圓點屬性 indicators = new ImageView[listPics.size()]; for(int i=0;i<indicators.length;i++){ indicator = new ImageView(this); indicator.setLayoutParams(new LinearLayout.LayoutParams(40,40)); indicator.setPadding(5,5,5,5); indicators[i] = indicator; if(i == 0){ indicators[i].setBackgroundResource(R.drawable.ic_launcher_background); }else{ indicators[i].setBackgroundResource(R.drawable.ic_launcher_foreground); } viewGroup.addView(indicators[i]); } //設置ViewPager適配器 viewPager.setAdapter(new pagerAdapter(getSupportFragmentManager())); //設置viewPager監(jiān)聽器 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { index.getAndSet(position); for(int i = 0;i <indicators.length; i ++){ if(i ==position){ indicators[i].setBackgroundResource(R.drawable.a1); }else{ indicators[i].setBackgroundResource(R.drawable.a2); } } } @Override public void onPageScrollStateChanged(int state) { } }); viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: iscontinue = false; break; case MotionEvent.ACTION_UP: iscontinue = true; break; } return false; } }); //使用多線程切換UI new Thread(new Runnable() { @Override public void run() { while (true){ if(iscontinue){ viewHandler.sendEmptyMessage(index.get()); whatOption(); } } } }).start(); } private void whatOption(){ index.incrementAndGet();//將當前位置+1; if(index.get()>indicators.length-1){ index.getAndAdd(-4); } try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } private void initFragments() { imgs = new ArrayList<Integer>(); imgs.add(R.mipmap.timg1); imgs.add(R.mipmap.timg2); imgs.add(R.mipmap.timg3); imgs.add(R.mipmap.timg4); } class pagerAdapter extends FragmentPagerAdapter{ public pagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int arg0) { //得到要顯示的對象并初始化圖片 MyFragment fm = new MyFragment(); fm.setUrl(imgs.get(arg0)); return fm; } @Override public int getCount() { return imgs.size(); } } } class MyPagerAdapter extends PagerAdapter{ private List<View> viewList; public MyPagerAdapter(List<View>viewList){ this.viewList = viewList; } @Override public int getCount() { return viewList.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view==object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position); } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView(viewList.get(position)); } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- android?ViewPager實現(xiàn)一個無限輪播圖
- Android Viewpager實現(xiàn)無限循環(huán)輪播圖
- Android使用viewpager實現(xiàn)自動無限輪播圖
- ViewPager打造輪播圖Banner/引導頁Guide
- Android 使用ViewPager實現(xiàn)輪播圖效果
- 淺談Viewpager和輪播圖的沖突解決方法
- Android ViewPager實現(xiàn)輪播圖效果
- Android實現(xiàn)基于ViewPager的無限循環(huán)自動播放帶指示器的輪播圖CarouselFigureView控件
- Android中用RxJava和ViewPager實現(xiàn)輪播圖
- 使用ViewPager2實現(xiàn)簡易輪播圖效果
相關文章
Android 7.0調(diào)用相機崩潰詳解及解決辦法
這篇文章主要介紹了 Android 7.0調(diào)用相機崩潰詳解及解決辦法的相關資料,需要的朋友可以參考下2016-12-12android 中win10 使用uwp控件實現(xiàn)進度條Marquez效果
這篇文章主要介紹了android 中win10 使用uwp控件實現(xiàn)進度條Marquez效果,需要的朋友可以參考下2017-06-06android開發(fā)教程之ubuntu使用adb連接小米2的步驟和adb調(diào)試方法
這篇文章主要介紹了ubuntu中使用adb連接小米2的步驟和adb調(diào)試方法,需要的朋友可以參考下2014-02-02Android中Bitmap、File與Uri之間的簡單記錄
這篇文章主要給大家介紹了關于Android中Bitmap、File與Uri之間的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-02-02Android開發(fā)中ImageLoder加載網(wǎng)絡圖片時將圖片設置為ImageView背景的方法
這篇文章主要介紹了Android開發(fā)中ImageLoder加載網(wǎng)絡圖片時將圖片設置為ImageView背景的方法,涉及Android ImageView圖片加載及背景設置相關操作技巧,需要的朋友可以參考下2018-01-01