Android ViewFlipper翻转视图使用详解

发布时间 - 2026-01-11 01:16:38    点击率:

简介

ViewFlipper是Android自带的一个多页面管理控件且可以自动播放!它和ViewPager有所不同,ViewPager继承自ViewGroup,是一页一页的,可以带动画效果,可以兼容低版本;而ViewFlipper继承ViewAnimator,是一层一层的,切换View的时候可以设置动画效果,是Android 4.0才引入的新控件。使用场景和ViewPager基本一样,在很多时候都是用来实现进入应用后的引导页或者用于图片轮播显示。

常用方法

setInAnimation:View进入屏幕时使用动画;
setOutAnimation:View退出屏幕时使用动画;
showNext:显示ViewFlipper里的下一个View视图;
showPrevious:显示ViewFlipper里的上一个View视图;
setFlipInterval:View之间切换的时间间隔;
setAutoStart:是否可以自动播放,true为自动播放,false为不自动播放;
startFlipping:自动循环切换播放;
stopFlipping:停止自动切换播放;

ViewFlipper加入View的两种方法

1.静态导入

所谓的静态导入就是像以下方式那样,将一个个页面添加到ViewFlipper的中间!

<ViewFlipper
 android:id="@+id/vf_help"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:flipInterval="3000"
 android:inAnimation="@anim/right_in"
 android:outAnimation="@anim/right_out">

 <include layout="@layout/page_help_one" />

 <include layout="@layout/page_help_two" />

 <include layout="@layout/page_help_three" />

 <include layout="@layout/page_help_four" />
</ViewFlipper>

2.动态导入

所谓的动态导入就是像以下方式那样,通过addView方法填充View!

mVfHelp = (ViewFlipper) findViewById(R.id.vf_help);
for (int i = 0; i < resId.length; i++) {
 mVfHelp.addView(getImageView(resId[i]));
}

使用示例

效果图:

使用ViewFlipper实现图片轮播 - 静态导入

切换动画:

1.right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

 <translate
 android:duration="1000"
 android:fromXDelta="100%p"
 android:toXDelta="0" />

</set>

2.right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

 <translate
 android:duration="1000"
 android:fromXDelta="0"
 android:toXDelta="-100%p" />

</set>


布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

 <ViewFlipper
 android:id="@+id/vf_help"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:flipInterval="3000"
 android:inAnimation="@anim/right_in"
 android:outAnimation="@anim/right_out">

 <include layout="@layout/page_help_one" />

 <include layout="@layout/page_help_two" />

 <include layout="@layout/page_help_three" />

 <include layout="@layout/page_help_four" />
 </ViewFlipper>
</LinearLayout>


Java文件调用:

public class MethodOneActivity extends BaseActivity {

 private ViewFlipper mVfHelp;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_method_one);

 mVfHelp = (ViewFlipper) findViewById(R.id.vf_help);
 mVfHelp.startFlipping();
 }
}


支持手势滑动的ViewFlipper - 动态导入

切换动画:

1.left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

 <translate
 android:duration="1000"
 android:fromXDelta="-100%p"
 android:toXDelta="0" />

</set>

2.left_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

 <translate
 android:duration="1000"
 android:fromXDelta="0"
 android:toXDelta="100%p" />

</set>

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

 <ViewFlipper
 android:id="@+id/vf_help"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />
</LinearLayout>


Java文件调用:

private void initData() {
 //实例化SimpleOnGestureListener与GestureDetector对象
 mgListener = new MyGestureListener();
 mDetector = new GestureDetector(mActivity, mgListener);

 //动态添加子View
 for (int i = 0; i < resId.length; i++) {
 mVfHelp.addView(getImageView(resId[i]));
 }
}

/**
 * @Description 重写onTouchEvent触发MyGestureListener里的方法
 */
@Override
public boolean onTouchEvent(MotionEvent event) {
 return mDetector.onTouchEvent(event);
}

/**
 * @Description 自定义一个View类下的GestureDetector
 */
private class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

 @Override
 public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) {
 if (e1.getX() - e2.getX() > MIN_MOVE) {
  mVfHelp.setInAnimation(mActivity, R.anim.right_in);
  mVfHelp.setOutAnimation(mActivity, R.anim.right_out);
  mVfHelp.showNext();
 } else if (e2.getX() - e1.getX() > MIN_MOVE) {
  mVfHelp.setInAnimation(mActivity, R.anim.left_in);
  mVfHelp.setOutAnimation(mActivity, R.anim.left_out);
  mVfHelp.showPrevious();
 }
 return true;
 }
}

项目地址 ☞ 传送门

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # ViewFlipper  # 翻转视图  # 解析Android中实现滑动翻页之ViewFlipper的使用详解  # Android中ViewFlipper的使用及设置动画效果实例详解  # Android TextSwitcher文本切换器和ViewFlipper使用详解  # Android ViewFlipper用法实例分析  # Android ViewFlipper简单用法解析  # Android使用ViewFlipper实现图片切换功能  # Android 使用ViewPager实现图片左右循环滑动自动播放  # Android自动播放Banner图片轮播效果  # Android实现自动播放图片功能  # Android使用自定义属性实现图片自动播放滚动的功能  # Android开发之ViewFlipper自动播放图片功能实现方法示例  # 可以自动  # 自动播放  # 都是  # 两种  # 有所不同  # 自定义  # 重写  # 自带  # 大家多多  # 多页  # 传送门  # anim  # outAnimation  # right_in  # inAnimation  # id  # vf_help  # lt 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序 闭包写法详细介绍  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  如何快速生成专业多端适配建站电话?  微信h5制作网站有哪些,免费微信H5页面制作工具?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  网站建设保证美观性,需要考虑的几点问题!  PHP 500报错的快速解决方法  南京网站制作费用,南京远驱官方网站?  linux写shell需要注意的问题(必看)  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  高端建站如何打造兼具美学与转化的品牌官网?  如何基于PHP生成高效IDC网络公司建站源码?  Java解压缩zip - 解压缩多个文件或文件夹实例  Python自动化办公教程_ExcelWordPDF批量处理案例  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何用PHP工具快速搭建高效网站?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Swift中循环语句中的转移语句 break 和 continue  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  如何打造高效商业网站?建站目的决定转化率  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel storage目录权限问题_Laravel文件写入权限设置  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  如何在IIS7中新建站点?详细步骤解析  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  如何在云虚拟主机上快速搭建个人网站?  javascript读取文本节点方法小结  浅述节点的创建及常见功能的实现  网站制作报价单模板图片,小松挖机官方网站报价?  php结合redis实现高并发下的抢购、秒杀功能的实例  如何快速搭建虚拟主机网站?新手必看指南  如何在IIS中新建站点并配置端口与IP地址?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  黑客入侵网站服务器的常见手法有哪些?  如何用y主机助手快速搭建网站?  详解Huffman编码算法之Java实现  如何快速生成高效建站系统源代码?  详解jQuery停止动画——stop()方法的使用  Laravel如何实现事件和监听器?(Event & Listener实战)  如何在宝塔面板中创建新站点?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  JavaScript实现Fly Bird小游戏