Android 基础入门教程2.5.6 ViewFlipper(翻转视图)的基本使用

2.5.6 ViewFlipper(翻转视图)的基本使用

分类Android 基础入门教程

本节引言:

本节给大家带了的是ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放! 和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层的,和ViewPager一样,很多时候, 用来实现进入应用后的引导页,或者用于图片轮播,本节我们就使用ViewFlipper写一个简单的图片 轮播的例子吧~官方API:ViewFlipper


1.为ViewFlipper加入View的两种方法

1)静态导入

所谓的静态导入就是像图中这样,把个个页面添加到ViewFlipper的中间!


2)动态导入

通过addView方法填充View


2.常用的一些方法

  • setInAnimation:设置View进入屏幕时使用的动画
  • setOutAnimation:设置View退出屏幕时使用的动画
  • showNext:调用该方法来显示ViewFlipper里的下一个View
  • showPrevious:调用该方法来显示ViewFlipper的上一个View
  • setFilpInterval:设置View之间切换的时间间隔
  • setFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
  • stopFlipping:停止View切换

3.使用实例

1)示例1:使用ViewFlipper实现图片轮播(静态导入)

实现效果图

实现代码

每个页面的布局都是一个简单的ImageView,这里就不贴了~先贴下两个进入以及 离开的动画:

right_in.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="2000" android:fromXDelta="100%p" android:toXDelta="0" /> </set>

right_out.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="2000" android:fromXDelta="0" android:toXDelta="-100%p" /> </set>

然后是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" tools:context=".MainActivity"> <ViewFlipper android:id="@+id/vflp_help" android:layout_width="match_parent" android:layout_height="match_parent" android:inAnimation="@anim/right_in" android:outAnimation="@anim/right_out" android:flipInterval="3000"> <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> </RelativeLayout>

这里我们设置了flipInterval = 3000,即每隔3000ms切还一个~ 最后我们只需在MainActivity.java中调用ViewFlipper的startFlipping()方法开始滑动!

MainActivity.java:

public class MainActivity extends AppCompatActivity { private ViewFlipper vflp_help; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vflp_help = (ViewFlipper) findViewById(R.id.vflp_help); vflp_help.startFlipping(); } }

2)示例2:支持手势滑动的ViewFlipper(动态导入)

实现效果图

代码实现

因为我们分为进入上一页,进入下一页,所以除了上面的两个动画外,我们再添加两个动画:

left_in.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="500" android:fromXDelta="-100%p" android:toXDelta="0" /> </set>

left_out.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="500" android:fromXDelta="0" android:toXDelta="100%p" /> </set>

MainActivity.java

public class MainActivity extends AppCompatActivity { private Context mContext; private ViewFlipper vflp_help; private int[] resId = {R.mipmap.ic_help_view_1,R.mipmap.ic_help_view_2, R.mipmap.ic_help_view_3,R.mipmap.ic_help_view_4}; private final static int MIN_MOVE = 200; //最小距离 private MyGestureListener mgListener; private GestureDetector mDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; //实例化SimpleOnGestureListener与GestureDetector对象 mgListener = new MyGestureListener(); mDetector = new GestureDetector(this, mgListener); vflp_help = (ViewFlipper) findViewById(R.id.vflp_help); //动态导入添加子View for(int i = 0;i < resId.length;i++){ vflp_help.addView(getImageView(resId[i])); } } //重写onTouchEvent触发MyGestureListener里的方法 @Override public boolean onTouchEvent(MotionEvent event) { return mDetector.onTouchEvent(event); } //自定义一个GestureListener,这个是View类下的,别写错哦!!! 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){ vflp_help.setInAnimation(mContext,R.anim.right_in); vflp_help.setOutAnimation(mContext, R.anim.right_out); vflp_help.showNext(); }else if(e2.getX() - e1.getX() > MIN_MOVE){ vflp_help.setInAnimation(mContext,R.anim.left_in); vflp_help.setOutAnimation(mContext, R.anim.left_out); vflp_help.showPrevious(); } return true; } } private ImageView getImageView(int resId){ ImageView img = new ImageView(this); img.setBackgroundResource(resId); return img; } }

代码要点解析

1.这里我们通过动态的方法添加View,这里只是简单的ImageView,可根据自己需求进行扩展! 2.相信细心的你发现了,这里我们的手势用的不是通过onTouchEvent直接判断的,然后重写 onTouch事件,对Action进行判断,然后如果是MotionEvent.ACTION_MOVE的话,就执行下述代码:

后来发现,模拟器上因为是鼠标的关系,并不会频繁的抖动,而真机上,因为手指一直是颤抖的 所以ACTION_MOVE会一直触发,然后View一直切换,后来考虑了Berial(B神)的建议,加入了 一个值来进行判断,就是添加一个标志:

可以是可以,不过感觉还是有点不流畅,怪怪的,后来想想还是用手势类,直接在onFling处理 就好,于是就有了上面的代码,运行起来杠杠滴~ 当然,如果你对Gesture手势不熟悉的话,可以参见之前写过的一篇文章: Android基础入门教程——3.8 Gesture(手势)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1164265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytest框架:mark标记功能

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、mark标记在实际工作中&#xff0c;我们要写的自动化用例会比较多&#xff0c;也不会都放在一个py文件中&#xff0c;如果有几十个py文件&#xff0c;上百个方…

新手必看!2026年这3张入门级网安证书,让你轻松踏入网络安安全行业

新手必看&#xff01;2026年这3张入门级网安证书&#xff0c;让你轻松踏入网络安全行业 如果你正准备进入网络安全行业&#xff0c;却还在纠结该考哪张证书作为起点&#xff0c;那么这篇文章会给你清晰的答案。 2026年&#xff0c;网络安全人才缺口依旧巨大&#xff0c;而对新…

初级网络安全工程师必看:全网最强的SSRF+XXE漏洞挖掘笔记教程,黑客技术零基础入门到精通实战!

一、Server-side request forgery (SSRF) 01、Basic SSRF against the local server 描述 该实验室具有库存检查功能&#xff0c;可从内部系统获取数据。 为了解决实验室&#xff0c;更改股票检查 URL 以访问管理界面http://localhost/admin并删除用户carlos。 解决方案 …

课程论文别再 “凑字数”!宏智树 AI:三步写出导师点赞的高分学术答卷

学期末的课程论文&#xff0c;堪称大学生的 “学术初体验”。但不少同学的写作状态却是&#xff1a;选题靠 “蒙”&#xff0c;文献靠 “堆”&#xff0c;查重靠 “改”&#xff0c;最后交出的论文要么是 “教材内容复刻版”&#xff0c;要么是 “网络观点拼盘”&#xff0c;不…

Android 基础入门教程2.5.7 Toast(吐司)的基本使用

2.5.7 Toast(吐司)的基本使用分类 Android 基础入门教程本节引言&#xff1a;好的&#xff0c;终于学习完Adapter类相关的一些控件&#xff0c;当然除了讲解的那几个&#xff0c;还有其他很多的 相关的控件&#xff0c;就不慢慢讲解了~有需要的自行查阅文档&#xff0c;查看相关…

基于单片机的可调直流稳压电源

2 系统的总体设计 2.1 系统的设计思路 对于单片机的调节基础之上&#xff0c;可以设置出对应的结构&#xff0c;可以发泄在结构图当中&#xff0c;这是一个非常完整的系统&#xff0c;并且主要通过由单片机模块显示电压模块以及电源模块及电源模块等进行组成&#xff0c;在设计…

基于单片机的楼宇智能照明系统

摘 要 近年来现代化建设颇具成效。城市发展建设作为现代化建设的重要一角&#xff0c;不仅仅在城市定位、技术革新、降低能耗等方面努力争先&#xff0c; 也在文化建设方面大放异彩。而智能楼宇作为高质量生活不可或缺的一环&#xff0c;智能照明也随之变得格外重要&#xff0…

白蚁监测仪:能根据长期监测数据预测白蚁的活动趋势和繁殖周期

白蚁虽小&#xff0c;危害却极大&#xff0c;它们悄无声息地蛀蚀建筑、树木&#xff0c;等人们察觉时&#xff0c;往往已造成难以挽回的损失。白蚁监测仪的出现&#xff0c;为应对这一难题提供了有效手段。白蚁监测仪运用了先进的生物传感与智能监测技术。其内部设有特制的诱饵…

手动设计 VS 宏智树 AI:问卷从 “无效数据” 到 “实证硬核” 的蜕变

作为专注论文写作科普的教育博主&#xff0c;后台总能收到粉丝的灵魂拷问&#xff1a;“为什么我熬了 3 天设计的问卷&#xff0c;回收的数据却成了‘学术废品’&#xff1f;”“明明参考了文献&#xff0c;题项还是被导师批‘逻辑混乱’‘信效度为零’&#xff1f;” 传统问卷…

基于单片机的空气质量检测系统的设计

第二章 系统方案设计 2.1 系统总体方案 本设计包含数据采集部分、数据处理部分和数据传输部分。数据采集部分采用了气体浓度检测传感器和ADC转换芯片设计&#xff0c;将物理量转换成输出稳定的数字信号&#xff0c;提升精准度。系统使用的温湿度传感器芯片直接测量温湿度。核心…

羽毛球思维养成课:韩宁波的战术意识培养术

羽毛球思维养成课&#xff1a;韩宁波的战术意识培养术 在羽毛球竞技领域&#xff0c;战术意识是决定比赛胜负的核心要素。国家二级运动员、资深战术教练韩宁波&#xff0c;通过"观察-分析-执行"三维训练体系&#xff0c;构建了独特的战术意识培养术。该体系融合数据…

MySQL 多表关联,最高效的查询方式:NLJ ,这样用性能翻5倍

概念 NLJ&#xff0c;全称 Index Nested-Loop Join&#xff08;基于索引的嵌套循环关联&#xff09;。它是MySQL 在执行 JOIN 时最常用、也是效率最高的算法之一。 它的核心思想是&#xff1a;用驱动表的每一行&#xff0c;去被驱动表的索引里做等值查找&#xff0c;从而把“…

开题报告怎么写不被毙?宏智树 AI 科普:三步搭建高质量学术蓝图

作为深耕论文写作科普的教育博主&#xff0c;后台每天都被 “开题报告改了 N 遍还被导师打回” 的求助刷屏。选题太泛没创新、文献综述像流水账、技术路线混乱看不懂…… 这些问题堪称开题写作的 “致命三连”。其实&#xff0c;一份合格的开题报告本质是 **“向导师证明你的研…

进阶-InnoDB引擎--逻辑存储结构

一、MySQL进阶 “你写的每一行 SQL&#xff0c;最终都会在 InnoDB 的精密架构中找到归宿。” —— 理解 InnoDB 的逻辑存储结构&#xff0c;是数据库性能调优与系统设计的基石。 1. InnoDB引擎 为什么我们要关心 InnoDB&#xff1f; 在现代 Web 应用中&#xff0c;MySQL 几乎…

用热爱浇筑专业:韩宁波的羽球教育初心录

韩宁波的羽球教育初心录&#xff1a;用热爱浇筑专业 一、初心萌芽&#xff1a;从赛场冠军到教育引路人 韩宁波的羽毛球生涯始于对胜利的渴望&#xff0c;却最终升华成对教育的执着。作为省级单打冠军&#xff0c;他在训练中曾遭遇技术瓶颈&#xff1a;正手杀球时速始终无法突…

2026年1000道Java架构师岗面试题汇总

半年前还在迷茫该学什么&#xff0c;怎样才能走出现在的困境&#xff0c;半年后已经成功上岸阿里&#xff0c;感谢在这期间帮助我的每一个人。面试中总结了1000道经典的Java面试题&#xff0c;里面包含面试要回答的知识重点&#xff0c;并且我根据知识类型进行了分类&#xff0…

60N03-ASEMI“30V耐压新标杆”60N03

编辑&#xff1a;ll 60N03-ASEMI“30V耐压新标杆”60N03 型号&#xff1a;60N03 沟道&#xff1a;NPN 品牌&#xff1a;ASEMI 封装&#xff1a;TO-252 批号&#xff1a;最新 导通内阻&#xff1a;4.3mΩ 漏源电流&#xff1a;60A 漏源电压&#xff1a;30V 引脚数量&a…

linux常用shell命令

文章目录文件和目录操作文件内容查看和编辑系统信息和管理网络相关包管理&#xff08;以Ubuntu为例&#xff09;权限管理压缩和解压查找和搜索其他实用命令文件和目录操作 ls&#xff1a;列出当前目录下的文件和子目录 cd [目录名]&#xff1a;切换到指定目录 pwd&#xff1a;…

【python实用小脚本-332】[HR揭秘]手工党疯狂下载附件的终结者|Python版Gmail批量附件下载加速器(建议收藏)

场景故事 作为HR&#xff0c;我曾用每天整整2小时完成下载500封应聘邮件附件的噩梦工作&#xff0c;直到发现手动操作的"三宗罪"导致团队错失3个关键岗位的黄金招聘期&#xff1a;第一&#xff0c;重复性点击引发的手腕劳损让我的体检报告亮起红灯&#xff1b;第二&a…

解读GB/T4857.7-2005:医疗器械包装正弦定频振动测试意义

在医疗器械、生物制药、敷料、疫苗等行业&#xff0c;产品运输过程中的安全性与完整性直接关系到临床使用效果和患者生命安全。GB/T4857.7-2005《包装 运输包装件基本试验 第7部分&#xff1a;正弦定频振动试验方法》作为运输包装振动测试的重要标准&#xff0c;为相关企业提供…