要做首页顶部的公告轮播,只有三张图,产品经理明确说不要手势滑动。用ViewPager2有点重,我用了ViewFlipper,二十行布局加十行代码就搞定。这个控件从API 1就有,简单场景反而比新组件省事。

布局里要写的四个属性

android:autoStart=true android:flipInterval=3000 android:inAnimation=@anim/slide_in android:outAnimation=@anim/slide_out

子View直接写在里面,每个都是一屏。autoStart为true会自动轮播,flipInterval单位是毫秒。inAnimation和outAnimation指向res/anim下的补间动画,不配就是瞬切。

代码控制的四个方法

flipper.startFlipping(); flipper.showNext(); flipper.showPrevious(); flipper.stopFlipping();

手动调用showNext前最好先stopFlipping,否则定时器和点击会打架。手指按下时停、抬起时恢复,体验会好很多。

和ViewPager2怎么选

  • ViewFlipper:不支持手势、没有指示器、不能回收View,适合3到5个固定页、自动播放的公告条。
  • ViewPager2:基于RecyclerView,支持滑动、复用、页面变换,适合图片多、要手势的Banner。

几个实际会踩的点

页面切到后台要stopFlipping,回前台再start,不然白耗电。子View里如果有视频或WebView,切换时不会自动暂停。给ViewFlipper加点击事件,取currentView再判断是第几页,比给每个子View单独设监听省事。动画时长建议300到500毫秒,太短会闪。

判断标准:不需要滑动、页数固定、只要自动轮播,ViewFlipper足够;一旦产品提到手势或无限循环,直接上ViewPager2,别在ViewFlipper上硬加GestureDetector。