Android ViewFlipper的使用分析
【ViewFlipper】——基础
1、ViewPager 和ViewFliping的区别:
最显著的区别就是ViewPager在滑动的时候内部的View默认就能够跟随手指滑动,而 ViewFliping内部的View组件不能够跟随手指滑动,也就是说它的滑动不受手指的晃动的控制
这样的话,我们用ViewFliper一般用在自动放映的图片展示(幻灯片上),否则的话就要考虑使用ViewPager了
2、ViewFlipper的使用机制:
① 将多个View组件添加到ViewFlipper的对象中
②为ViewFlipper中的View切换设置动画
③之后启动ViewFlipper的开始播放方法之后就能够一次切换这些View,在切换的过程中应用指定的动画
【ViewFlipper】——API
1、addView(View view)
将指定的View组件添加到ViewFlipper对象中,多次调用就可以添加多个View组件了 这个是View,所以可以添加任何的布局视图,但是ImageView自动放映幻灯片常用,否则用
ViewPager较好,你说呢?除此之外,我们也可以在XMl布局文件中将多个ImageView直接包裹在<ViewFlipper..../>中即可
2、setInAnimation(Animation animation) setInAnimation(Context context , int resId) 设置将要进入的那个画面的进入动画效果
setInAnimation(Animation animation) setOutAnimation(Context context , int resId) 设置将要移出的那个画面的移出动画效果
3、showPrevious() 显示上一张View页面
showNext() 显示下一张View页面
如果我们要人为的控制播放的话,就要用到这两个方法,这时setInAnimation 和setInAnimation 要和 showXXX()方法配合使用,下面的例子中没有涉及到,
参见《疯狂Android讲义ViewFlipper的例子》
4、setFlipInterval(int ):设置View切换的时间间隔,参数为毫秒
5、startFlipping():开始进行View的切换,时间间隔是上述方法设置的间隔数,切换会循环进行
6、stopFlipping():停止View切换
7、setAutoStart(boolean ) 设置是否自动开始。如果设置为“true”,当ViewFlipper显示的时候View的切换会自动开始
【ViewFlipper的幻灯片放映】
我们接下来模仿一下小米的音乐播放器的界面,这个界面的最上面是一个循环放映的幻灯片,效果如下:

上面的幻灯片正在处于切换状态
主布局非常的简单,上面是一个ViewFlipper,下面是一张图片
主布局文件activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.viewflipper_test.MainActivity"
android:background="@drawable/background" > <ViewFlipper
android:id="@+id/viewFlipper"
android:layout_width="wrap_content"
android:layout_height="150dp"
android:layout_alignParentTop="true"
android:paddingEnd="10dp"
android:paddingStart="10dp"
android:persistentDrawingCache="animation"
android:flipInterval="6000"> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/view_1"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/view_2"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/view_3"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/view_4"/> </ViewFlipper> <ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/viewFlipper"
android:paddingTop="10dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:scaleType="fitXY"
android:src="@drawable/bottom_picture"/> </RelativeLayout>
动画文件 res/anim/left_out.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http://schemas.android.com/apk/res/android"
3 android:interpolator="@android:anim/linear_interpolator"
4 android:shareInterpolator="true"
5 android:duration="2000">
6
7 <alpha android:fromAlpha="1.0"
8 android:toAlpha="0.0"/>
9
10 <translate
11 android:fromXDelta="0%"
12 android:toXDelta="-100%"/>
13
14 </set>
动画文件 res/anim/right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true"
android:duration="2000"> <alpha android:fromAlpha="0.0"
android:toAlpha="1.0"/> <translate
android:fromXDelta="100%"
android:toXDelta="0%"/> </set>
主Activity文件 MainActivity.java文件
public class MainActivity extends Activity {
ViewFlipper viewFlipper ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper);
viewFlipper.setInAnimation(MainActivity.this, R.anim.right_in);
viewFlipper.setOutAnimation(MainActivity.this, R.anim.left_out);
viewFlipper.setAutoStart(true);
}
}
【注意】
我们在ViewFlipper中设定了切换间隔时间android:flipInterval="6000" ,这个时间一定要注意,它也将动画的执行时间包含在内了,由于我们自上面的动画文件中,将动画的切换时间设为android:duration="2000" , 这样的话,每个ImageView的展现时间实际为 4000 毫秒
Android ViewFlipper的使用分析的更多相关文章
- android wifi ANR问题分析总结
android wifi ANR问题分析总结 1 看看main进程阻塞在那里? 2 调用关系的函数阻塞在那里? 3 最终阻塞函数的阻塞前的log以及状态
- 从Android系统出发,分析Android控件构架
从Android系统出发,分析Android控件构架 Android中所有的控件追溯到根源,就是View 和ViewGroup,相信这个大家都知道,但是大家也许会不太清楚它们之间的具体关系是什么,在A ...
- [转] Android实时抓包分析 : 善用adb调试桥
Android实时抓包分析 : 善用adb调试桥 谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump.方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包 ...
- [置顶] Android开发之serviceManager分析
Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ...
- Android中AppWidget的分析与应用:AppWidgetProvider .
from: http://blog.csdn.net/thl789/article/details/7887968 本文从开发AppWidgetProvider角度出发,看一个AppWidgetPrv ...
- Android四个多线程分析:MessageQueue实现
Android四个多线程分析:MessageQueue的实现 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前面两篇文章<Android多线 ...
- Appium Android Bootstrap源码分析之启动运行
通过前面的两篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>和<Appium Android Bootstrap源码分析之命令解析 ...
- Appium Android Bootstrap源码分析之命令解析执行
通过上一篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>我们知道了Appium从pc端发送过来的命令如果是控件相关的话,最终目标控件在b ...
- Appium Android Bootstrap源码分析之控件AndroidElement
通过上一篇文章<Appium Android Bootstrap源码分析之简介>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的 ...
随机推荐
- Browser对象
Window对象即浏览器中打开的窗口,当文档里面有框架(frame或者iframe标签)时,浏览器会为HTML文档创建一个window对象,并为每个框架创建一个额外的window对象. 属性close ...
- HDU:Integer Inquiry
#include"stdio.h" #include"stdlib.h" #include"string.h" #define N 105 ...
- noi 2971 抓住那头牛
2971:抓住那头牛 查看 提交 统计 提问 总时间限制: 2000ms 内存限制: 65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N ...
- Multi-Perspective Sentence Similarity Modeling论文demo实现
由于下载glove时,下载脚本并未自己执行txt文件转.th文件,在执行th trainSIC.lua时报错 需要根据fetch_and_preprocess.sh中的代码利用scripts中的con ...
- 2016年11月3日 星期四 --出埃及记 Exodus 19:19
2016年11月3日 星期四 --出埃及记 Exodus 19:19 and the sound of the trumpet grew louder and louder. Then Moses s ...
- SqlSever基础 top 后面的n 由一个简单的计算式子计算得出
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- 我的android学习经历18
今天主要学了几个android控件和使用两个适配器 ListView DatePicker和TimePicker GridView 适配器:SimpleAdapter和ArrayAdapter 都是常 ...
- js九宫格的碰撞检测
说来惭愧,我一直以为四四方方的拖拽碰撞检测是一个比较容易的事情,后来试过一次,真是让我耗费了无数的脑细胞,原理其实不难,但是具体做起来可就让我很恶心,这可能跟我驾驭的代码数量有关系,我一般也就写半屏幕 ...
- Dev gridview新增一行自动获得焦点并打开编辑模式
1.gridview添加一行自动获得焦点实现方式: 关键代码: GarsonZhang dt.Rows.Add("1", "2"); gridView1.Foc ...
- 各种操作中心Operation Center一览
Operation Center在中国可能有很多种名称,例如指挥中心.运维室.总控中心等等,国外可能也有很多名称,不管名称如何,任何一个上规模得数据总心或者运维单位一般都有一个这样得中心,来负责所管理 ...