Android ViewPager最简单使用

首先,ViewPager已经被淘汰了,目前应该使用ViewPager2。我之所以看这个是有某种原因。

事由:

在网上看到很多关于ViewPager的文章,但是大多数都结合了一些其他的东西,比如shape、Selector,让我这种小白看得云里雾里。真的叫难者不会、会者不难。所以在勉强看懂后,精简了一下。

ViewPager是安卓的一个组件,允许用户左右滑动显示放置在里面的多个View。

PagerAdapter用于向ViewPager中放入多个View。

用法:

一、构建布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.viewpager.widget.ViewPagerandroid:id="@+id/imagePager"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" /></LinearLayout>

二、自定义一个Adapter类继承自PagerAdapter

一般来说,我们需要为自定义的Adapter类准备一个构造函数,用于保存传入的参数,并且生成需要左右滑动的多个View。

1、需要从活动传入上下文

2、需要传入每个滑动页面的背景图(也可以传入包含背景图的自定义类)

为了简单,我们只传入了背景图的id,因为ImageView也是View的一种,所以就直接在ViewPager中构建了一个List<ImageView>来存放需要滑动的View。

大多数情况下,你需要为滑动页面写一个布局文件,不仅包括背景图,还包括一些按钮什么的。

public class MyPagerAdapter extends PagerAdapter {private Context myContext;private int[] imageArray;private List<ImageView> images;public MyPagerAdapter(Context myContext, int[] imageArray) {this.myContext = myContext;this.imageArray = imageArray;images = new ArrayList<>();for (int id : imageArray) {ImageView view = new ImageView(myContext);// 设置图片填满整个容器view.setScaleType(ImageView.ScaleType.FIT_XY);view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));view.setImageResource(id);images.add(view);}}

三、重写父类方法

至少需要重写四个父类方法。

1、getCount():返回可滑动的View总数

2、isViewFromObject:判断instantiateItem()函数所返回来的Key与一个页面视图是否同一个视图

3、instantiateItem():装填当前位置的View

4、destroyItem():去除当前位置的View

只要一开始初始化好了View的列表,这四个方法基本上都不需要改动。

    @Overridepublic int getCount() {return images.size();}@Overridepublic boolean isViewFromObject(@NonNull @NotNull View view, @NonNull @NotNull Object object) {return view==object;}@NonNull@NotNull@Overridepublic Object instantiateItem(@NonNull @NotNull ViewGroup container, int position) {ImageView view = images.get(position);container.addView(view);return view;}@Overridepublic void destroyItem(@NonNull @NotNull ViewGroup container, int position, @NonNull @NotNull Object object) {container.removeView(images.get(position));}
}

四、关联Adapter

简单的通过setAdaper()方法,将ViewPager和自定义的PagerAdapter关联起来。

public class MainActivity extends AppCompatActivity {// 定义引导页图片数组private int[] imageArray = {R.drawable.yingdao1, R.drawable.yingdao2,R.drawable.yingdao3, R.drawable.yingdao4};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ViewPager viewPager = findViewById(R.id.imagePager);MyPagerAdapter adapter = new MyPagerAdapter(this, imageArray);viewPager.setAdapter(adapter);}
}

五、还需要做什么

做完上面的部分,就已经可以滑动了。不过很多时候还需要为ViewPager增加一个addOnPageChangeListener()方法,然后重写以下方法,来提供更多的功能:

1、onPageScrolled
2、onPageSelected
3、onPageScrollStateChanged

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

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

相关文章

使用Alpha Vantage API和Python进行金融数据分析

Alpha Vantage通过一套强大且开发者友好的数据API和电子表格&#xff0c;提供实时和历史的金融市场数据。从传统资产类别&#xff08;例如股票、ETF、共同基金&#xff09;到经济指标&#xff0c;从外汇汇率到大宗商品&#xff0c;从基本数据到技术指标&#xff0c;Alpha Vanta…

扫雪铲冰,绿萝护航平安出行

为保护行人出行安全&#xff0c;确保道路干净整洁&#xff0c;绿萝党员志愿者带头行动&#xff0c;号召志愿者积极参与扫雪铲冰。2023年12月16日&#xff0c;绿萝志愿服务队与拱辰集体林场携手在昊天碳中和公园开展了志愿扫雪活动。 行动是最好的融雪剂。大雪过后的道路是最为寒…

自动驾驶TPM技术杂谈 ———— 交通事件分类与编码

文章目录 介绍交通事件分类交通事件分类顺序码交通事故交通灾害交通气象路面状况道路施工活动重大事件其他 介绍 1. 交通事件 —— 由于人、车辆、设施、环境之间的不协调导致正常交通秩序的突发性混乱事件。  2. 交通管制 —— 公安机关交通管理部门根据法律、法规&#xff0…

2.1 数据操作

声明&#xff1a; 注意&#xff01;&#xff01;&#xff01; 本博客仅用于本人学习笔记作用&#xff0c;所有资料来源都来自于李沐大神&#xff0c;博客中图片为沐神书上的图片。如有侵权&#xff0c;请联系本人删除&#xff0c;谢谢。 资料来源&#xff1a;https://zh-v2.d2…

什么是通讯芯片?通讯芯片又分什么种类?

通讯芯片是指在通讯系统中起到连接和传输信号的重要组成部分。根据通讯芯片的功能和应用,可以将其分为以下几类: 1、收发器芯片 2、窄带中频放大器芯片 3、卫星接收器LNB芯片 4、电话机芯片 5、压缩扩展器芯片 以上是通讯芯片的一些分类&#xff0c;随着通讯技术的不断发展…

什么是预解析

预解析&#xff08;pre-parsing&#xff09;是指在解析器开始解析代码之前&#xff0c;先对代码进行一些处理和分析的过程。这个过程有助于提高解析器的效率和准确性。 在Javascript中&#xff0c;预解析是指在代码执行之前&#xff0c;Javascript引擎会先对代码进行一次扫描&…

patchless amsi学习(中)

DR7 DR7被称为“调试控制寄存器”&#xff0c;允许对每个硬件断点进行精细控制。其中&#xff0c;前8位控制是否启用了特定的硬件断点。偶数位&#xff08;0、2、4、6&#xff09;称为L0-L3&#xff0c;在本地启用了断点&#xff0c;这意味着仅在当前任务中检测到断点异常时才…

接口自动化测试实战教程

实现思路 使用excel管理用例用例信息&#xff0c;requests模块发送http请求&#xff0c;实现了记录日志&#xff0c;邮件发送测试报告的功能 目录结构如下&#xff1a; 下面直接上代码&#xff1a; 统筹脚本 # -*- coding:utf-8 -*-import osfrom interface import Interfa…

Android Termux安装MySQL数据库并通过内网穿透实现公网远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

【MongoDB】--MongoDB的Sort排序问题

目录 一、问题背景描述1.1、问题背景1.2、问题分析 二、建立索引支持深度翻页查询2.1、调整sort排序的内存限制【不建议】2.2、创建索引2.3、拓展--组合索引什么时候失效 二、聚合查询解决深度翻页查询 一、问题背景描述 1.1、问题背景 现实系统页面翻页到20000页之后&#x…

Improving IP Geolocation with Target-Centric IP Graph (Student Abstract)

ABSTRACT 准确的IP地理定位对于位置感知的应用程序是必不可少的。虽然基于以路由器为中心(router-centric )的IP图的最新进展被认为是前沿的,但一个挑战仍然存在:稀疏IP图的流行(14.24%,少于10个节点,9.73%孤立)限制了图的学习。为了缓解这个问题,我们将目标主机(ta…

【LeetCode刷题笔记(8-2)】【Python】【接雨水】【单调栈】【困难】

文章目录 引言接雨水题目描述提示 解决方案2&#xff1a;【单调栈】结束语 【接雨水】 【LeetCode刷题笔记&#xff08;8-1&#xff09;】【Python】【接雨水】【动态规划】【困难】 引言 编写通过所有测试案例的代码并不简单&#xff0c;通常需要深思熟虑和理性分析。虽然这…

200kw直流电子负载测试

在进行200kw直流电子负载测试时&#xff0c;需要设置合适的负载参数&#xff0c;如电流、电压和功率等&#xff0c;并记录测试结果。在测试过程中&#xff0c;可以通过改变负载参数来模拟不同工作条件下的电子设备的性能。通过对电子设备在不同负载条件下的响应进行测试和分析&…

JupyterHub 如何切换 conda 小环境

JupyterHub 如何切换 conda 小环境 服务器已经部署好 JupyterHub &#xff0c;相关端口请看对应答疑群群公告。在Jupyterhub 中使用 conda 创建的小环境&#xff0c;首先 ssh 登录上服务器或者在 JupyterHub 网页端打开终端 terminal。然后安装 conda &#xff0c;方法请见 Q4&…

关于复制SimPy仿真环境的生成器的讨论

文章目录 基础内容生成器介绍保存和恢复生成器的状态 参考文章&#xff1a; SimPy Discrete event simulation for Pythonpython离散事件仿真库SimPy官方教程离散事件仿真原理DES 基础内容 生成器介绍 离散事件仿真库Simpy的执行效率之所以很高&#xff0c;关键在于生成器的…

【MyBatis Plus】逻辑删除、分页、乐观锁的应用及讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《MyBatis-Plus》。&#x1f3af;&#x1f3af; &am…

改进灰狼算法求解:考虑需求响应的风-光柴-储容量优化配置

目录 文章摘要&#xff1a; 亮点&#xff1a; 研究背景&#xff1a; 考虑需求相应的容量配置&#xff1a; 风、光、柴、储微电网模型&#xff1a; 储能配置模型&#xff1a; 改进的灰狼算法&#xff1a; 基于余弦规律变化的收敛因子 引入动态权重策略 运行效果&#…

数据结构:图文详解 队列 | 循环队列 的各种操作(出队,入队,获取队列元素,判断队列状态)

目录 队列的概念 队列的数据结构 队列的实现 入队 出队 获取队头元素 获取队列长度 循环队列的概念 循环队列的数据结构 循环队列的实现 判断队列是否为空 判断队列是否已满 入队 出队 得到队头元素 得到队尾元素 队列的概念 队列&#xff08;Queue&#xff0…

基于单片机的视力保护及身姿矫正器设计(论文+源码)

1. 系统设计 在本次设计中&#xff0c;其系统整个框图如图2-1所示。其主要的核心控制模块由超声波模块&#xff0c;光敏电阻&#xff0c;按键模块&#xff0c;复位电路&#xff0c;红外模块&#xff0c;LCD显示等组成。其包括自动模式&#xff0c;手动模式。自动模式&#xff…

upload-labs笔记

简介 upload-labs是一个使用php语言编写的&#xff0c;专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共21关&#xff0c;每一关都包含着不同上传方式。 文件上传漏洞是指&#xff1a; Web 服务器允许用户将文件上传至其…