本文实例为大家分享了viewpager自动循环轮播图的具体代码,供大家参考,具体内容如下

布局文件

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;//保存圆点指示器的数组
 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();
 //动态设置四个圆点属性
 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监听器
 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));
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Devmax。

viewpager实现自动循环轮播图的更多相关文章

  1. android – 在listview中添加viewpager作为滚动标题

    我试图在列表标题中添加Viewpager(使用支持库4),但它没有显示任何内容.这是我的代码请帮忙.它将在列表标题中不作为项目,因此它不应该是一个问题.解决方法listadapter之后的listview页眉和页脚显示.如果你尝试setadapter,并且看不到viewpager.检查viewpager的宽度和高度.如果viewpager的宽度或高度值为0.在viewgroup中创建LienarL

  2. 从ViewPager Fragments中隐藏Android应用程序中的软键盘

    我有一个Android应用程序,其中包含一个包含2个片段的ViewPager.第一个片段包含EditText字段.当应用程序启动时,该字段立即获得焦点并启动软键盘.第二个片段仅包含一个列表.当我从片段1滑动到片段2时,我希望键盘能够消失.我尝试过的任何东西似乎都没有用.键盘不仅保持在视图中,还继续更新片段1的EditText字段.我想我要么使用不正确的代码来隐藏键盘或将其放在错误的位置.如果任何人都可以发布正确实现的示例,将不胜感激!

  3. android – Slider Menu片段中的可交换选项卡

    我已经通过引用thistutorial实现了导航抽屉,现在我想要做的是在片段内显示滑动标签.即当我点击导航抽屉中的一个项目时,让我们说第一个项目,它应显示该项目的滑动标签.如果item1是Events,当我点击它时,它应该显示滑动标签.但我面临以下问题:–>如何在片段内实现视图寻呼机?

  4. android – 如何在ViewPager中使用cursorLoader?

    解决方法我无法评论,所以我正在写一个答案..您有一个实现LoaderCallbacks的活动.加载数据时,您的活动会收到onLoadFinished回调.在此方法中,您有一个应该在ViewPager中显示的Cursor.要显示Cursor中的数据,请在适配器上调用swapCursor方法.因此,每次加载数据时都不要创建适配器.创建一次,然后只需调用swapCursor即可.此外,每次都找不到ViewPager–findViewById是一个繁重的操作,它应该在创建视图层次结构后执行.所以,你的onLoad

  5. android – FragmentPagerAdapter不会在方向更改时重新创建片段吗?

    可能是其他一些解决方案?这些碎片有什么问题?

  6. android – Horizo​​ntalScrollView还是Carrousel?

    我在SO上找到的最接近的例子是here.这正是我需要的,但我已经测试了给出的答案,但它对我不起作用……但问题中的图像正是我想要的.任何人都可以指导我这样做吗?编辑2:根据你给出的两个例子,你看过this和this吗?这就是你要找的东西吗?

  7. 选项卡图标和文本均使用android设计支持库

    解决方法你是什么意思未被选中.你能分享一下你想要达到的目标以及你现在所处的位置.我不推荐你的做法.它做了很多不需要的东西来解决你的问题.我建议使用TabLayout类中的图标和文本,只需设置图标和文本.或者,如果需要,甚至是自定义布局,但使用TabLayout中的text1和图标.这样做有什么问题吗?

  8. Android在FragmentPagerAdapter中的Fragment中设置TextView文本

    更新:那么做这样的事情?

  9. android – 为什么ViewPager中的第一个视图显示为空?

    我有一个使用以下适配器的viewpager,在加载后,第一个视图显示为空,但事实并非如此.如果我滚动到下一个视图,然后向后滚动,我可以看到内容.以下是从我的活动中实现它的代码……解决方法尝试添加followindonCreate方法,我的代码工作.也许只是因为在不合适的时间调用resetPages()?

  10. Android ViewPager CrossFade动画

    我为android实现了BottomNavigation视图,我有一些片段显示为BottomNavigation页面.根据GoogleMaterialDesignGuideLines我想用交叉淡入淡出动画显示片段.通过触摸BottomNavigation的项目,我的ViewpPager使用默认幻灯片动画更改片段.我在this和this阅读了一些解决方案.但这些并不是真正的淡入淡出动画,我无法设置渐

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部