Android ViewFlipper翻转视图使用详解
简介
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; } }
项目地址 ☞ 传送门
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 逆向APK进行smali注入实现“秒破WIFI”
- 我所理解的Android 启动模式
- 搭建开源入侵检测系统Snort,并实现与防火墙联动
- 如何在Python中为长短期记忆网络扩展数据
- android 开发Handler源码剖析
- Keras作为TensorFlow的简化界面:教程
- Android基础:Fragment,看这篇就够了
- Rest api简介
- crossdomain.xml文件配置不当利用手法
- Android 常用的ORM框架详解
- 测试全球最安全的手机Blackphone
- 国产SSL防火墙 – sslfw
- Android 之dragger使用
- Android图像处理 - 高斯模糊的原理及实现
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Python语言的精华:Itertools库
- MySQL为什么lsof会看到这么多临时文件
- IE浏览器主页被劫持,如何解决主页被篡改问题?
- 参与国际化项目一定要遵循的java命名规范
- 威胁事件告警分析技巧及处置(二)
- 组复制安全 | 全方位认识 MySQL 8.0 Group Replication
- 那些年我们遇的bug
- Spring 里那么多种 CORS 的配置方式,到底有什么区别
- oracle 数据库:"ORA-01940: 无法删除当前连接的用户",解决办法
- 不要在Spring单元测试中使用 @Transactional注解
- OpenCV DNN模块官方教程(一)加载Caffe模型做图像分类
- Python爬虫之mongodb的聚合操作
- Linux中文输入法-搜狗输入法安装方法
- oracle 数据库问题:"ORA-01922: 必须指定 CASCADE 以删除...",原因及解决办法
- OpenCV DNN模块官方教程(二)YoloV4目标检测实例