Android 原生控件ViewFlipper实现仿淘宝滚动广告条
原创
©著作权归作者所有:来自51CTO博客作者wx5a2789a90b17c的原创作品,请联系作者获取转载授权,否则将追究法律责任
首先说一下:这个控件是Android原生自带,不需要依赖和导包
有了这个控件,直接使用,就可以实现图中的广告效果
话不多说,先来看一下这个控件能实现的效果:
实际图片只作为例子,更华丽的实现可以看完自己发挥
ViewFlipper 简单介绍
下面呢 是 ViewFlipper 这个控件的继承关系
ViewFlipper extends ViewAnimator
ViewAnimator extends FrameLayout
FrameLayout extends ViewGroup
可以看出
它具有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);
}
我看到很多人都问:这个东西没有适配器,怎么样加载长度不定的数据呢,
这里我直接贴出代码来了(经过简化).有需要的拿去.