原文:Android零基础入门第56节:翻转视图ViewFlipper打造引导页和轮播图

前面两期学习了 ViewAnimator及其子类ViewSwitcher的使用,以及ViewSwitcher的子类ImageSwitcher和TextSwitcher的使用,你都掌握了吗?本期我们一起来学习ViewAnimator另一个子类 ViewFlipper组件的使用。

一、ViewFlipper概述

ViewFlipper组件继承了 ViewAnimator,它可调用addView(View v)添加多个组件,一旦向 ViewFlipper中添加了多个组件之后,ViewFlipper就可使用动画控制多个组件之间的切换效果。

ViewFlipper与前面介绍的AdapterViewFlipper有较大的相似性,它们可以控制组件切换的动画效果。它们的区别是:ViewFlipper需要开发者通过addView(View v)添加多个View,而 AdapterViewFlipper则只要传入一个Adapter,Adapter将会负责提供多个View。因此ViewFlipper 可以指定与 AdapterViewFlipper 相同的 XML 属性。

ViewFlipper组件的一些常用方法如下:

  • setInAnimation:设置View进入屏幕时使用的动画。

  • setOutAnimation:设置View退出屏幕时使用的动画。

  • showNext:调用该方法来显示ViewFlipper里的下一个View。

  • showPrevious:调用该方法来显示ViewFlipper的上一个View。

  • setFilpInterval:设置View之间切换的时间间隔。

  • setFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行。

  • stopFlipping:停止View切换。

二、ViewFlipper示例

接下来通过一个简单的示例程序来学习ViewFlipper的使用。

继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建viewflipper_layout.xml文件,在其中填充如下代码片段:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ViewFlipperandroid:id="@+id/details"android:layout_width="match_parent"android:layout_height="match_parent"android:flipInterval="1000"><ImageViewandroid:src="@drawable/image_01"android:layout_width="match_parent"android:layout_height="wrap_content"android:scaleType="fitXY"></ImageView><ImageViewandroid:src="@drawable/image_02"android:layout_width="match_parent"android:layout_height="wrap_content"android:scaleType="fitXY"></ImageView><ImageViewandroid:src="@drawable/image_03"android:layout_width="match_parent"android:layout_height="wrap_content"android:scaleType="fitXY"></ImageView></ViewFlipper><Buttonandroid:text="&lt;"android:onClick="prev"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerInParent="true"android:onClick="auto"android:text="自动播放"/><Buttonandroid:text="&gt;"android:onClick="next"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"/>
</RelativeLayout>

上面的界面布局文件中定义了一个ViewFlipper,并在该ViewFlipper中定义了三个 ImageView,这意味着该ViewFlipper包含了三个子组件。

接下来在Activity代码中即可调用 ViewFlipper 的 showPrevious()、showNext()等方法控制 ViewFlipper 显示上一个、下一个子组件。为了控制组件切换时的动画效果,还需要调用ViewFlipper的setlnAnimation()、setOutAnimation() 方法设置动画效果。新建ViewFlipperActivity.java文件,加载上面新建的布局文件,具体代码如下:

package com.jinyu.cqkxzsxy.android.advancedviewsample;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ViewFlipper;/*** @创建者 鑫鱻* @描述 Android零基础入门到精通系列教程,欢迎关注微信公众号ShareExpert*/
public class ViewFlipperActivity extends AppCompatActivity {private ViewFlipper mViewFlipper = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.viewflipper_layout);mViewFlipper = (ViewFlipper) findViewById(R.id.details);}// 上一个public void prev(View source) {mViewFlipper.setInAnimation(this, R.anim.slide_in_right);mViewFlipper.setOutAnimation(this, R.anim.slide_out_left);// 显示上一个组件
        mViewFlipper.showPrevious();// 停止自动播放
        mViewFlipper.stopFlipping();}// 下一个public void next(View source) {mViewFlipper.setInAnimation(this, android.R.anim.slide_in_left);mViewFlipper.setOutAnimation(this, android.R.anim.slide_out_right);// 显示下一个组件
        mViewFlipper.showNext();// 停止自动播放
        mViewFlipper.stopFlipping();}// 自动播放public void auto(View source) {mViewFlipper.setInAnimation(this, android.R.anim.slide_in_left);mViewFlipper.setOutAnimation(this, android.R.anim.slide_out_right);// 开始自动播放
        mViewFlipper.startFlipping();}
}

上面程序中的代码就是控制ViewFlipper切换组件的动画效果,以及控制ViewFlipper切换组件的关键代码。

运行程序,点击“<”和“>”两个按钮时可以看到下图所示图片切换效果。

当点击自动播放按钮后,ViewFlipper则开始自动轮播图片。

在该例子中使用了静态导入ViewFlipper组件页面,实际开发中也可以通过addView动态添加。如果加入手势左右滑动操作,就打造出了应用程序启动的时候经常用到的引导页面;如果同该例子一样使用自动播放,那么就非常容易实现如图片轮播等行为。

关于ViewAnimator系列组件学习完毕,下期一起来学习Picker系列组件。

今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻所有,若需转载请联系作者授权,特此声明!

往期总结分享:

Android零基础入门第1节:Android的前世今生

Android零基础入门第2节:Android 系统架构和应用组件那些事

Android零基础入门第3节:带你一起来聊一聊Android开发环境

Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招

Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神

Android零基础入门第6节:配置优化SDK Manager, 正式约会女神

Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点

Android零基础入门第9节:Android应用实战,不懂代码也可以开发

Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio

Android零基础入门第11节:简单几步带你飞,运行Android Studio工程

Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

Android零基础入门第13节:Android Studio配置优化,打造开发利器

Android零基础入门第14节:使用高速Genymotion,跨入火箭时代

Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

Android零基础入门第16节:Android用户界面开发概述

Android零基础入门第17节:文本框TextView

Android零基础入门第18节:输入框EditText

Android零基础入门第19节:按钮Button

Android零基础入门第20节:复选框CheckBox和单选按钮RadioButton

Android零基础入门第21节:开关组件ToggleButton和Switch

Android零基础入门第22节:图像视图ImageView

Android零基础入门第23节:图像按钮ImageButton和缩放按钮ZoomButton

Android零基础入门第24节:自定义View简单使用,打造属于你的控件

Android零基础入门第25节:简单且最常用的LinearLayout线性布局

Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不同

Android零基础入门第27节:正确使用padding和margin

Android零基础入门第28节:轻松掌握RelativeLayout相对布局

Android零基础入门第29节:善用TableLayout表格布局

Android零基础入门第30节:两分钟掌握FrameLayout帧布局

Android零基础入门第31节:少用的AbsoluteLayout绝对布局

Android零基础入门第32节:新推出的GridLayout网格布局

Android零基础入门第33节:Android事件处理概述

Android零基础入门第34节:Android中基于监听的事件处理

Android零基础入门第35节:Android中基于回调的事件处理

Android零基础入门第36节:Android系统事件的处理

Android零基础入门第37节:初识ListView

Android零基础入门第38节:初识Adapter

Android零基础入门第39节:ListActivity和自定义列表项

Android零基础入门第40节:自定义ArrayAdapter

Android零基础入门第41节:使用SimpleAdapter

Android零基础入门第42节:自定义BaseAdapter

Android零基础入门第43节:ListView优化和列表首尾使用

Android零基础入门第44节:ListView数据动态更新

Android零基础入门第45节:网格视图GridView

Android零基础入门第46节:列表选项框Spinner

Android零基础入门第47节:自动完成文本框AutoCompleteTextView

Android零基础入门第48节:可折叠列表ExpandableListView

Android零基础入门第49节:AdapterViewFlipper图片轮播

Android零基础入门第50节:StackView卡片堆叠

Android零基础入门第51节:进度条ProgressBar

Android零基础入门第52节:自定义ProgressBar炫酷进度条

Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar

Android零基础入门第54节:视图切换组件ViewSwitcher

Android零基础入门第55节:ImageSwitcher和TextSwitcher

Android零基础入门第56节:翻转视图ViewFlipper打造引导页和轮播图相关推荐

  1. Android零基础入门第77节:Activity任务栈和启动模式

    2019独角兽企业重金招聘Python工程师标准>>> 通过前面的学习,Activity的基本使用都已掌握,接下来一起来学习更高级的一些内容. Android采用任务栈(Task)的 ...

  2. Android零基础入门第89节:Fragment回退栈及弹出方法

    2019独角兽企业重金招聘Python工程师标准>>> 在上一期分享的文章末尾留了一个课后作业,有去思考如何解决吗?如果已经会了那么恭喜你,如果还不会也没关系,本期一起来学习. 一. ...

  3. Android零基础入门第81节:Activity数据传递

    在Android开发中,经常要在Activity之间传递数据.前面也学习了Activity和Intent相关基础,接下来一起来学习Activity的数据传递. 一.简介 通过前面的学习知道,Inten ...

  4. Android零基础入门第83节:Activity间数据传递方法汇总

    2019独角兽企业重金招聘Python工程师标准>>> 在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间 ...

  5. Android零基础入门第85节:Fragment使用起来非常简单

    2019独角兽企业重金招聘Python工程师标准>>> Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragm ...

  6. Android零基础入门第87节:Fragment添加、删除、替换

    2019独角兽企业重金招聘Python工程师标准>>> 前面一起学习了Fragment的创建和加载,以及其生命周期方法,那么接下来进一步来学习Fragment的具体使用,本期先来学习 ...

  7. Android零基础入门第86节:探究Fragment生命周期

    2019独角兽企业重金招聘Python工程师标准>>> 一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用.Fragment可 ...

  8. Android零基础入门第75节:Activity状态和生命周期方法

    前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多. 生命周期就是一个对象从创建到销毁的过程,每一个对象 ...

  9. Android零基础入门第76节:Activity数据保存和横竖屏切换

    在前面几期学习了Activity的创建.配置.启动和停止,还学了Activity的生命周期,本期一起来学习Activity有关的更多事儿. 一.数据保存 通过上一期 LogCat 窗口打印的日志可以看 ...

  10. Android零基础入门第65节:RecyclerView分割线开发技巧

    2019独角兽企业重金招聘Python工程师标准>>> 在上一期通过简单学习,已经领略到了RecyclerView的灵活性,当然都是一些最基础的用法,那么本期一起来学习Recycle ...

最新文章

  1. openFileDialog 打开TXT记事本文件写入数据库
  2. java jsoup解析html标签_jsoup解析html
  3. @jsonfield注解_好了,不装了,撸个注解有什么难的!
  4. awk 内嵌正则 提取字符串_使用awk提取字符串中的数字或字母
  5. Javamysql语法转化oracle_MySQL到Oracle语法错误(限制/偏移/更新)
  6. Linux系统Zookeeper集群配置
  7. UVA11027 Palindromic Permutation【回文】
  8. 【node】---记忆内容
  9. Git 和 SVN之间的五个基本区别
  10. jQuery AJAX 方法
  11. 【交易技术前沿】券商买方投顾系统建设实践
  12. 用matlab解拉格朗日,用MATLAB实现拉格朗日插值
  13. 单点登录 Oauth2认证 详解
  14. 企业私有云资源规划及设计
  15. xmlhttp的实际使用
  16. 美团技术分享:大众点评App的短视频耗电量优化实战
  17. 为了沙漠中的奋进者:“视人为人”的陕煤曹家滩 智慧矿区
  18. 云栖专辑 | 阿里开发者们的第8个感悟:在信息大爆炸的时代,保持专注度显得尤为可贵
  19. 如何使用React创建视频和动画
  20. EDMA 和QDMA 还看不懂,先收藏着

热门文章

  1. 优秀程序员必须知道的八件事情
  2. 有感于Oracle 9i的QueryHints
  3. (转)Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w
  4. AtCoder Grand Contest 023
  5. 《疯狂Java讲义》(十八)---- JAR文件
  6. MySQL SQL error: #1271 - Illegal mix of collations for operation 'UNION'
  7. 100_1小记ressons analysis
  8. ARM汇编中值滤波实验
  9. 简单的字段类型定义(新新手看)
  10. android 输入法出现挤压屏幕、android输入键盘覆盖了屏幕控件的解决办法