随着智能手机的普及,更多的APP开始使用轮播图来展示图片或者介绍内容,轮播图常常是APP中一个非常重要的部分。在Android开发中,要实现一个轮播图,并不需要使用很多复杂的代码,ViewFlipper这个控件可以很好地实现轮播图的效果。本文主要介绍ViewFlipper控件的使用,来轻松地实现轮播图。
一、ViewFlipper简介
ViewFlipper是Android系统提供的一个可视化控件容器,继承自ViewAnimator类,能够自动播放多个子View。它可以包含多个布局或视图,使你能够在这些视图之间进行平滑的切换。 而一个ViewFlipper是一个子类布局,可以包含一个或多个子视图,子视图可以是任何类型的View,包括布局。ViewFlipper以一种动画效果展示它的子View,例如从左边进入、淡入淡出等。它能够简单地完成像“下一页”、“上一页”这样的翻页效果。同时ViewFlipper控件具有良好的可扩展性,在需要扩展的时候可以拓展其子类。
二、ViewFlipper使用
在开始使用ViewFlipper时,我们需要在xml文件中定义一个ViewFlipper。然后在Java文件中进行初始化,添加子View把它们添加到ViewFlipper中。
2.1. Xml中定义ViewFlipper
我们可以在xml文件中定义ViewFlipper如下:
```
android:id="@+id/vf" android:layout_width="match_parent" android:layout_height="wrap_content" android:autoStart="true" android:flipInterval="3000" android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out" /> ``` 其中,id属性指定该ViewFlipper的id,layout_width和layout_height属性指定宽高,autoStart属性指定是否自动开始播放,flipInterval属性指定播放时间间隔,inAnimation属性指定动画进入效果,outAnimation属性指定动画出现效果。 2.2. Java中添加子View 在Java文件中,我们首先需要在布局中找到ViewFlipper,然后使用ViewFlipper.addView()方法添加子视图。可以直接传入布局文件或者通过代码创建视图也可以动态添加视图。如下: ``` ViewFlipper vf = findViewById(R.id.vf); View view1 = LayoutInflater.from(this).inflate(R.layout.view1,null);//通过布局文件创建视图 View view2 = new View(this);//通过代码创建视图 view2.setBackgroundColor(Color.BLUE); vf.addView(view1); vf.addView(view2); ``` 2.3. Java中设置动画效果 除了在xml中指定inAnimation和outAnimation外,我们也可以在Java文件中设置动画效果。以在Java文件中设置渐变效果为例,具体代码如下: ``` private ViewFlipper vf; private Animation inAnimation; private Animation outAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vf = findViewById(R.id.vf); inAnimation = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_in); outAnimation = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_out); vf.setInAnimation(inAnimation); vf.setOutAnimation(outAnimation); } ``` 其中,fade_in和fade_out都是系统内置的动画效果。通过调用ViewFlipper.setInAnimation()和ViewFlipper.setOutAnimation()方法来设置进入和退出动画,最终运行效果如下: ![](https://cdn.jsdelivr.net/gh/QiuYaohong/PicBed/img/20211021212814.png) 三、ViewFlipper实现轮播图 在实际应用中,我们可以在ViewFlipper中添加多个子View,但是一般情况下,我们会使用ViewFlipper来实现简单的轮播图。我们可以使用一个集合变量存储要展示的图片,然后使用循环将图片添加到ViewFlipper的子布局中。 ``` public class MainActivity extends AppCompatActivity { private ViewFlipper vf; private List private static final int[] ids = {R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4}; private Animation inAnimation; private Animation outAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vf = findViewById(R.id.vf); imgList = new ArrayList<>(); for(int i = 0 ; i < ids.length ; i++){ imgList.add(i,ids[i]); } for(int i = 0 ; i < imgList.size() ; i++){ ImageView imageView = new ImageView(this); imageView.setImageResource(imgList.get(i)); imageView.setScaleType(ImageView.ScaleType.FIT_XY); vf.addView(imageView); } inAnimation = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_in); outAnimation = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_out); vf.setInAnimation(inAnimation); vf.setOutAnimation(outAnimation); } } ``` 其中,imgList是存储图片的集合,ids数组中是应用中要播放的图片资源。通过循环将每个小图片添加到viewFlipper 中,最终实现轮播图效果,运行效果如图: ![](https://cdn.jsdelivr.net/gh/QiuYaohong/PicBed/img/20211021213551.gif) 四、小结 ViewFlipper在Android开发中使用广泛,基本完成了现代手机App中各种视图间的滑动切换效果。掌握了ViewFlipper的使用,我们可以很轻松地实现一个轮播图。总体来看,ViewFlipper的使用并不复杂,同时它的可扩展性也非常好,可以根据不同的需求进行扩展。