Android之ViewPager的简单使用[通俗易懂]

Android之ViewPager的简单使用[通俗易懂]AndroidViewPager的简单使用Android3.0后引入的一个UI控件——ViewPager(视图滑动切换工具)功能:通过手势滑动可以完成View的切换,一般是用来做APP的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4兼容包ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager设置切换时

大家好,又见面了,我是你们的朋友全栈君。

Android ViewPager的简单使用

Android 3.0后引入的一个UI控件——ViewPager(视图滑动切换工具)

功能:通过手势滑动可以完成View的切换,一般是用来做APP 的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4 兼容包

ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左 右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager 设置切换时的动画效果。

和ListView,GridView一样,我们也需要一个Adapter (适配器)将我们的View和ViewPager进行绑定,而ViewPager则有一个特定的Adapter—— PagerAdapter

一、实例1.ViewPager简单的切换

通过滑动去切换View

运行效果:
在这里插入图片描述

  1. 编写activity_main.xml布局
<?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" android:orientation="vertical">

   <androidx.viewpager.widget.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="600dp"/>

<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ViewPagre" android:layout_gravity="center"/>
</LinearLayout>
  1. 编写三个布局layout1.xml、layout2.xml、layout3.xml

三个布局都差不多,就只放一个布局了。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">

    <TextView android:background="#72C43C" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是第一个分页" android:textColor="#ff0000" android:textSize="30sp" android:layout_marginTop="200dp" android:layout_gravity="center"/>
</LinearLayout>
  1. 编写MainActivity活动类
package com.mq.viewpager;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity { 

private ViewPager mViewPager;
private List<View> mViews;  //存放视图的数组
private View view1,view2,view3;
private PagerAdapter mPagerAdapter;//适配器
@Override
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager=findViewById(R.id.viewpager);// 实例化viewpager控件
LayoutInflater inflater = getLayoutInflater();//获取布局对象管理
view1=inflater.inflate(R.layout.layout1,null);//实例化view
view2=inflater.inflate(R.layout.layout2,null);
view3=inflater.inflate(R.layout.layout3,null);
mViews=new ArrayList<View>();//将要显示的布局存放到list数组
mViews.add(view1);
mViews.add(view2);
mViews.add(view3);
//实例化一个PagerAdapter的适配器
mPagerAdapter=new PagerAdapter() { 

@Override   //返回要滑动的VIew的个数
public int getCount() { 

return mViews.size();
}
@Override  //来判断pager的一个view是否和instantiateItem方法返回的object有关联
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { 

return view==object;
}
@Override  //从当前container中删除指定位置(position)的View;
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { 

container.removeView(mViews.get(position));
}
@NonNull
@Override  //第一:将当前视图添加到container中,第二:返回当前View
public Object instantiateItem(@NonNull ViewGroup container, int position) { 

container.addView(mViews.get(position));
return mViews.get(position);
}
};
mViewPager.setAdapter(mPagerAdapter);//设置适配器
}
}

注意:

使用PagerAdapter必须重写的四个方法:

getCount(): 获得viewpager中有多少个view

destroyItem(): 移除一个给定位置的页面。适配器有责任从容器中删除这个视图。 这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除。

instantiateItem(): ①将给定位置的view添加到ViewGroup(容器)中,创建并显示出来 ②返回一个代表新增页面的Object(key),通常都是直接返回view本身就可以了,当然你也可以 自定义自己的key,但是key和每个view要一一对应的关系

isViewFromObject(): 判断instantiateItem(ViewGroup, int position)函数所返回来的Key与一个页面视图是否是 代表的同一个视图(即它俩是否是对应的,对应的表示同一个View),通常我们直接写 return view == object!

二、实例2.标题栏——PagerTitleStrip与PagerTabStrip

跟随着ViewPager滑动而滑动的标题咯,这两个是官方提供的,一个是普通文字, 一个是带有下划线,以及可以点击文字可切换页面

PagerTitleStrip 运行效果:
在这里插入图片描述

  1. 三个view的布局文件还是和实例1中的一样
  2. 修改activity_main.xml布局文件
<?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" android:orientation="vertical">
<TextView android:layout_width="match_parent" android:layout_height="48dp" android:background="#CCFF99" android:gravity="center" android:text="PagerTitleStrip效果演示" android:textColor="#000000" android:textSize="18sp" />
<androidx.viewpager.widget.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center">
<androidx.viewpager.widget.PagerTitleStrip android:id="@+id/pagertitle" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_gravity="top" android:textColor="#000000" />
</androidx.viewpager.widget.ViewPager>
</LinearLayout>
  1. 自定义一个MyPagerAdapter适配器
package com.mq.viewpager;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewpager.widget.PagerAdapter;
import java.util.ArrayList;
public class MyPagerAdapter extends PagerAdapter { 

private ArrayList<View> mViewlist;
private ArrayList<String> mtitlelist;
public MyPagerAdapter() { 

}
public MyPagerAdapter(ArrayList<View> viewlist, ArrayList<String> mtitlelist) { 

mViewlist = viewlist;
this.mtitlelist = mtitlelist;
}
@Override
public int getCount() { 

return mViewlist.size();//返回view数组大小
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { 

return view==object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) { 

container.addView(mViewlist.get(position));
return mViewlist.get(position);
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { 

container.removeView(mViewlist.get(position));
}
@Nullable
@Override
public CharSequence getPageTitle(int position) { 

return mtitlelist.get(position);
}
}
  1. 编写MainActivity代码
package com.mq.viewpager;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity { 

private ViewPager mViewPager;
private ArrayList<View> mViews;  //存放视图的数组
private View view1,view2,view3;
private MyPagerAdapter mAdapter;//适配器
private ArrayList<String> mtitle;//存放标题的数组
@Override
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = findViewById(R.id.viewpager);// 实例化viewpager控件
LayoutInflater inflater = getLayoutInflater();//获取布局对象管理
view1 = inflater.inflate(R.layout.layout1, null);//实例化view
view2 = inflater.inflate(R.layout.layout2, null);
view3 = inflater.inflate(R.layout.layout3, null);
mViews = new ArrayList<View>();//将要显示的布局存放到list数组
mViews.add(view1);
mViews.add(view2);
mViews.add(view3);
mtitle = new ArrayList<String>();//存放标题的数组
mtitle.add("推荐");
mtitle.add("热门");
mtitle.add("直播");
mAdapter=new MyPagerAdapter(mViews,mtitle);//实例化适配器
mViewPager.setAdapter(mAdapter);//设置适配器
}
}

PagerTabStrip :就是比PagerTitleStrip多一个下划线
运行效果:

在这里插入图片描述

只要修改activity_main.xml的PagerTitleStrip为PagerTabStrip即可

在这里插入图片描述

这些简单的使用样式都太丑,在我们的开发中往往都会和其他控件一起使用。

今天的分享就到这了!ε=ε=ε=ε=ε=ε=┌(; ̄◇ ̄)┘

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163234.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • jps命令详解_jps用什么文件打开

    jps命令详解_jps用什么文件打开jps命令详解

  • 数据仓库常见建模方法与大数据领域建模实例综述

    数据仓库常见建模方法与大数据领域建模实例综述为什么需要数据建模?为什么要进行数据仓库建模?随着DT时代互联网、智能设备等信息技术的发展,数据开始井喷式的增长,如何讲这些数据进行有序、有结构地分类组织存储是我们面临的一个挑战。如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置,而不是乱糟糟的大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑…

  • 磁盘阵列怎么组linux系统,Linux系统下如何设置磁盘阵列?

    磁盘阵列怎么组linux系统,Linux系统下如何设置磁盘阵列?在Linux系统中,磁盘阵列主要通过/etc/raidtab配置文件来控制的。若系统管理员需要实现磁盘阵列的话,就需要手工创建这个配置文件。或者从其他地方复制这个文件,并进行相应的修改。默认情况下,在Linux系统中不会有这个文件。下面笔者就对这个文件中的主要参数进行讲解,帮助大家建立一个正确的磁盘阵列配置文件。参数一:raid-level指定磁盘阵列的类型。  磁盘阵列到目前为止,有不下于十种…

  • layui 单选框、多选框radio 元素判断是必填项 lay-verify=‘required‘

    layui 单选框、多选框radio 元素判断是必填项 lay-verify=‘required‘简单验证复选框,单选框必填例子代码:<!DOCTYPEhtml><html><head><metacharset=”utf-8″><title>layui</title><metaname=”renderer”content=”webkit”><metaht…

  • QcustomPlot 多条单条曲线光标自动更随的实现

    QcustomPlot 多条单条曲线光标自动更随的实现QcustomPlot光标跟随最近有一个需求是能绘制多条曲线且能光标跟随,上网搜了很多相关的资料,如下边这个博客中查到了鼠标更随的相关代码,他的图如下所示——[原文链接地址](https://blog.csdn.net/sunnyloves/article/details/82344815)还有一篇如下所示——[原文链接地址](https://www.cnblogs.com…

    2022年10月16日
  • 函数strtol和strtok详解[通俗易懂]

    函数strtol和strtok详解[通俗易懂]一、strtol()函数的原型为:longintstrtol(constchar*nptr,char**endptr,intbase);函数的解释说明  这个函数会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数base代表采的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号