java写轮播图,Android零基础入门第49节:AdapterViewFlipper图片轮播
上一期学习了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图片轮播相关推荐
- Android零基础入门第64节:揭开RecyclerView庐山真面目
大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本期一起来学习Android 5.X新增的一个列表组件,那就是RecyclerVi ...
- Android零基础入门第83节:Activity间数据传递方法汇总
2019独角兽企业重金招聘Python工程师标准>>> 在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间 ...
- Android零基础入门第68节:完善RecyclerView,添加首尾视图
2019独角兽企业重金招聘Python工程师标准>>> 在之前学习ListView的时候,有学习过如何给ListView添加列表头和列表尾.但是通过近几期的学习,发现Recycler ...
- Android零基础入门第85节:Fragment使用起来非常简单
2019独角兽企业重金招聘Python工程师标准>>> Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragm ...
- Android零基础入门第62节:搜索框组件SearchView
一.SearchView概述 SearchView是搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监控用户输入,当用户输入完成后提交搜索时,也可通过监听器执行实际的搜索. SearchV ...
- Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar
前面两期都在学习ProgressBar的使用,关于自定义ProgressBar的内容后期会继续学习的,本期先来学习ProgressBar的2个子组件SeekBar和RatingBar. 一.SeekB ...
- Android零基础入门第76节:Activity数据保存和横竖屏切换
在前面几期学习了Activity的创建.配置.启动和停止,还学了Activity的生命周期,本期一起来学习Activity有关的更多事儿. 一.数据保存 通过上一期 LogCat 窗口打印的日志可以看 ...
- Android零基础入门第77节:Activity任务栈和启动模式
2019独角兽企业重金招聘Python工程师标准>>> 通过前面的学习,Activity的基本使用都已掌握,接下来一起来学习更高级的一些内容. Android采用任务栈(Task)的 ...
- Android零基础入门第65节:RecyclerView分割线开发技巧
2019独角兽企业重金招聘Python工程师标准>>> 在上一期通过简单学习,已经领略到了RecyclerView的灵活性,当然都是一些最基础的用法,那么本期一起来学习Recycle ...
最新文章
- flexbox_Flexbox中的Flex基础属性
- matlab编写的程序输入参数怎么写,用matlab编写一个用EM算法估计参数的程序
- 用“组策略”修改注册表十大个经典范例
- 软件工程python就业方向-软件工程实践总结
- etc/ld.so.conf的使用说明
- linux系统安装后需要的有效小工具(持续更新)
- 机器人能翻转汉堡肉饼 短暂上岗后将“休息”四天
- 推荐一套高效的码字工具
- Node.js实现基于TCP与UDP的数据通信
- 【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)
- BGP的community属性
- Android文本输入框EditText方法说明和属性
- Mybatis的简单增删查改(CRUD)
- 淘宝API开发(一) 简单的用TOPAPI来获取淘宝用户信息
- ISO 28000供应链安全管理简述及标准
- CRUISE软件测试工程师,CruiseControl.NET配置
- CAD单行文本数字求和
- html之使用session进行服务器之间的跳转以及记录
- SwiftUI 内功教程之Closures 09 闭包捕捉价值Capturing Values及经典用法
- Logic Pro X自带音色库列表
热门文章
- 【区块链108将】对话张斗:TFBOYS幕后推手,他们要出海打造首个区块链男团FBI
- L1-035 情人节(java)
- 156-161.网络安全渗透测试—[Cobalt Strike系列]—[内网渗透之Windos域环境的搭建]
- xlsxwriter设置单元格格式
- 卧室投影仪什么牌子好?选择应该考虑哪几个方面?
- 海尔linux系统密码,海尔路由器密码忘记了怎么办?
- Flask有线打印机转无线打印机(电脑和手机)
- python第3周(python学习题集)
- Java最困扰你的那些事
- phpStudy出现80端口被占用,占用进程为System