首先说一下:这个控件是Android原生自带,不需要依赖和导包

有了这个控件,直接使用,就可以实现图中的广告效果

话不多说,先来看一下这个控件能实现的效果:

实际图片只作为例子,更华丽的实现可以看完自己发挥

Android 原生控件ViewFlipper实现仿淘宝滚动广告条_Android

Android 原生控件ViewFlipper实现仿淘宝滚动广告条_垂直滚动_02

ViewFlipper 简单介绍

下面呢 是 ViewFlipper 这个控件的继承关系

ViewFlipper extends ViewAnimator
ViewAnimator extends FrameLayout
FrameLayout extends ViewGroup
ViewGroup extends View

可以看出

它具有FrameLayout  和ViewGroup的所有特点

也就是说它的加载方式和管理方式和 ViewPager 相似 (ViewPager extends ViewGroup)

区别呢

ViewFlipper不需要适配器,而ViewPager需要适配器

ViewFlipper自己本身具有定时滚动的内部实现(Handler)

下面来看一下代码,相信你一眼就看懂.(使用可直接粘贴拿走)

<!-- 滚动轮播广告条 !-->
<ViewFlipper
android:id="@+id/vf"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoStart="true"
android:flipInterval="3000"
android:inAnimatinotallow="@anim/anim_marquee_in"
android:outAnimatinotallow="@anim/anim_marquee_out" />

解释一下上面的属性和动画代码:

  • android:autoStart:设置自动加载下一个View
  • android:flipInterval:设置View之间切换的时间间隔
  • android:inAnimation:设置切换View的进入动画
  • android:outAnimation:设置切换View的退出动画
anim_marquee_in.xml

<?xml versinotallow="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duratinotallow="1500"
android:fromYDelta="100%p"
android:toYDelta="0"/>
</set>

anim_marquee_out.xml
<?xml versinotallow="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duratinotallow="1500"
android:fromYDelta="0"
android:toYDelta="-100%p"/>
</set>

切记,要实现垂直滚动,必须加上动画,否则默认定时滚动为 左右滚动!

下面是ViewFlipper常用的方法

  • isFlipping: 判断View切换是否正在进行
  • setFilpInterval:设置View之间切换的时间间隔
  • startFlipping:开始View的切换,而且会循环进行
  • stopFlipping:停止View的切换
  • setOutAnimation:设置切换View的退出动画
  • setInAnimation:设置切换View的进入动画
  • showNext: 显示ViewFlipper里的下一个View
  • showPrevious:显示ViewFlipper里的上一个View

下面呢是最后一段代码, 设置页面和属性(循环加载不定长度的数据):

ViewFlipper viewFlipper = findViewById(R.id.award_user_vf);
for (int i = 0; i < mList.size(); i++) {
View view = View.inflate(Activity_award_user.this, R.layout.item_vf, null);
TextView text1 = view.findViewById(R.id.item_vf_tv1);
text1.setText(mList.get(i).getName());
viewFlipper.addView(view);
}

我看到很多人都问:这个东西没有适配器,怎么样加载长度不定的数据呢,

这里我直接贴出代码来了(经过简化).有需要的拿去.