上一期学习了ExpandableListView的使用,你已经掌握了吗?本期开始学习AdapterViewFilpper的使用。

一、认识AdapterViewFilpper

AdapterViewFilpper 继承 了AdapterViewAnimator,它也会显示 Adapter 提供的多个 View 组件,但它每次只能显示一个View组件,程序可通过showPrevious()和showNext()方法控制该组件显示上一个、下一个组件。

AdapterViewFilpper可以在多个View切换过程中使用渐隐渐显的动画效果。除此之外,还可以调用该组件的startFlipping()控制它“自动播放”下一个View组件。

AdapterViewAnimator支持的XML属性如下:

·         android:animateFirstView:设置显示组件的第一个View时是否使用动画。

·         android:inAnimation:设置组件显示时使用的动画。

·         android:loopViews:设置循环到最后一个组件时是否自动跳转到第一个组件。

·         android:outAnimation:设置组件隐藏时使用的动画。

AdapterViewFilpper额外支持的XML属性及相关方法如下表所示。

二、AdapterViewFilpper示例

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

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

[代码]xml代码:01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32<?xml version="1.0" encoding="utf-8" ?>

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/flipper"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:flipInterval="5000"

android:layout_alignParentTop="true"/>

android:id="@+id/prev_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_alignParentLeft="true"

android:text="上一个"/>

android:id="@+id/next_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true"

android:text="下一个"/>

android:id="@+id/auto_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_alignParentRight="true"

android:text="自动播放"/>

创建一个MyFilpperAdapter类,继承BaseAdapter类,重写其4个主要方法,具体代码如下:

[代码]java代码:01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59package com.jinyu.cqkxzsxy.android.listviewsample.adapter;

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

/**

* @创建者 鑫鱻

* @描述 Android零基础入门到精通系列教程,欢迎关注微信公众号ShareExpert

*/

public class MyFilpperAdapter   extends BaseAdapter   {

private Context mContext = null;

private int[] mImageIds = null;

public MyFilpperAdapter(Context context, int[]   imageIds) {

this.mContext   = context;

this.mImageIds   = imageIds;

}

@Override

public int getCount() {

return mImageIds.length;

}

@Override

public Object getItem(int position) {

return position;

}

@Override

public long getItemId(int position) {

return position;

}

//该方法返回的View代表了每个列表项

@Override

public View getView(int position, View convertView, ViewGroup   parent) {

ImageView   imageView = null;

if(null == convertView) {

//创建一个ImageView

imageView   = new ImageView(mContext);

//设置ImageView的缩放类型

imageView.setScaleType(ImageView.ScaleType.FIT_XY);

//为imageView设置布局参数

imageView.setLayoutParams(new ViewGroup.LayoutParams(

ViewGroup.LayoutParams.MATCH_PARENT,   ViewGroup.LayoutParams.MATCH_PARENT));

convertView   = imageView;

}   else {

imageView   = (ImageView) convertView;

}

//给ImageView设置图片资源

imageView.setImageResource(mImageIds[position]);

return imageView;

}

}

接下来为AdapterViewFilpper提供Adapter,使用自定义的BaseAdapter。新建AdapterViewFilperActivity.java文件,加载上面新建的布局文件,具体代码如下:

[代码]java代码:01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66package com.jinyu.cqkxzsxy.android.listviewsample;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.AdapterViewFlipper;

import android.widget.Button;

import com.jinyu.cqkxzsxy.android.listviewsample.adapter.MyFilpperAdapter;

public class AdapterViewFilperActivity   extends AppCompatActivity   implements View.OnClickListener   {

private AdapterViewFlipper mFlipper = null;

private Button mPrevBtn = null;

private Button mNextBtn = null;

private Button mAutoBtn = null;

private int[] mImageIds = {

R.drawable.image_01,R.drawable.image_02,R.drawable.image_03,

R.drawable.image_04,R.drawable.image_05,R.drawable.image_06,

R.drawable.image_07,R.drawable.image_08,R.drawable.image_09

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.adapterview_filpper_layout);

//获取界面组件

mFlipper   = (AdapterViewFlipper) findViewById(R.id.flipper);

mPrevBtn   = (Button) findViewById(R.id.prev_btn);

mNextBtn   = (Button) findViewById(R.id.next_btn);

mAutoBtn   = (Button) findViewById(R.id.auto_btn);

//为AdapterViewFlipper设置Adapter

MyFilpperAdapter   adapter = new MyFilpperAdapter(this,   mImageIds);

mFlipper.setAdapter(adapter);

//为三个按钮设置点击事件监听器

mPrevBtn.setOnClickListener(this);

mNextBtn.setOnClickListener(this);

mAutoBtn.setOnClickListener(this);

}

@Override

public void onClick(View view) {

switch (view.getId()){

case R.id.prev_btn:

//显示上一个组件

mFlipper.showPrevious();

//停止自动播放

mFlipper.stopFlipping();

break;

case R.id.next_btn:

//显示下一个组件。

mFlipper.showNext();

//停止自动播放

mFlipper.stopFlipping();

break;

case R.id.auto_btn:

//开始自动播放

mFlipper.startFlipping();

break;

default:

break;

}

}

}

上面程序代码调用了 AdapterViewFlipper 的 showPrevious()、 showNext()方法来控制该组件显示上一个、下一个组件,并调用了 startFlipping()方法控制自动播放。

修改程序启动的Activity,运行程序,可以看到下图所示界面效果。

单击上一个或下一个按钮可以切换显示的组件,单击自动播放按钮,将可以看到AdapterViewFlipper每隔5秒更换一个图片,切换图片时会使用渐隐渐显效果。

至此,关于AdapterViewFlipper的简单使用学习完毕,更多属性和方法建议多加练习并掌握。

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

java写轮播图,Android零基础入门第49节:AdapterViewFlipper图片轮播相关推荐

  1. Android零基础入门第64节:揭开RecyclerView庐山真面目

    大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本期一起来学习Android 5.X新增的一个列表组件,那就是RecyclerVi ...

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

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

  3. Android零基础入门第68节:完善RecyclerView,添加首尾视图

    2019独角兽企业重金招聘Python工程师标准>>> 在之前学习ListView的时候,有学习过如何给ListView添加列表头和列表尾.但是通过近几期的学习,发现Recycler ...

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

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

  5. Android零基础入门第62节:搜索框组件SearchView

    一.SearchView概述 SearchView是搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监控用户输入,当用户输入完成后提交搜索时,也可通过监听器执行实际的搜索. SearchV ...

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

    前面两期都在学习ProgressBar的使用,关于自定义ProgressBar的内容后期会继续学习的,本期先来学习ProgressBar的2个子组件SeekBar和RatingBar. 一.SeekB ...

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

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

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

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

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

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

最新文章

  1. flexbox_Flexbox中的Flex基础属性
  2. matlab编写的程序输入参数怎么写,用matlab编写一个用EM算法估计参数的程序
  3. 用“组策略”修改注册表十大个经典范例
  4. 软件工程python就业方向-软件工程实践总结
  5. etc/ld.so.conf的使用说明
  6. linux系统安装后需要的有效小工具(持续更新)
  7. 机器人能翻转汉堡肉饼 短暂上岗后将“休息”四天
  8. 推荐一套高效的码字工具
  9. Node.js实现基于TCP与UDP的数据通信
  10. 【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)
  11. BGP的community属性
  12. Android文本输入框EditText方法说明和属性
  13. Mybatis的简单增删查改(CRUD)
  14. 淘宝API开发(一) 简单的用TOPAPI来获取淘宝用户信息
  15. ISO 28000供应链安全管理简述及标准
  16. CRUISE软件测试工程师,CruiseControl.NET配置
  17. CAD单行文本数字求和
  18. html之使用session进行服务器之间的跳转以及记录
  19. SwiftUI 内功教程之Closures 09 闭包捕捉价值Capturing Values及经典用法
  20. Logic Pro X自带音色库列表

热门文章

  1. 【区块链108将】对话张斗:TFBOYS幕后推手,他们要出海打造首个区块链男团FBI
  2. L1-035 情人节(java)
  3. 156-161.网络安全渗透测试—[Cobalt Strike系列]—[内网渗透之Windos域环境的搭建]
  4. xlsxwriter设置单元格格式
  5. 卧室投影仪什么牌子好?选择应该考虑哪几个方面?
  6. 海尔linux系统密码,海尔路由器密码忘记了怎么办?
  7. Flask有线打印机转无线打印机(电脑和手机)
  8. python第3周(python学习题集)
  9. Java最困扰你的那些事
  10. phpStudy出现80端口被占用,占用进程为System