要想实现翻页的效果,就必须创建一个实现PagerAdapter的类,从PagerAdapter派生的翻页适配器的6个方法:
getCount:这个方法是获得页面的个数
IsviewFromObject :判断当前试图是否来自指定对象
destroyItem 销毁当前页面试图,翻页到下一个页面
instantiateItem 创建新的页面
Java代码
首先是Java代码中的适配器的创建,创建一个这样的类,继承PagerAdapter类,然后构造方法,以及其他的四个类
其中的一个属性,就是图片集合,这个集合通过在构造方法中通过遍历工具类中的数据,然后得到数据传入到图片集合中。
- package com.example.chapter6.database;
- import android.content.Context;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import androidx.annotation.NonNull;
- import androidx.annotation.Nullable;
- import androidx.viewpager.widget.PagerAdapter;
- import com.example.chapter6.utils.Shopping;
- import java.util.ArrayList;
- import java.util.List;
- public class ImageViewPager extends PagerAdapter {
- private final Context context;
- private List<Shopping> shoppingList;
- //声明一个关于图像的集合
- private List<ImageView> imageList = new ArrayList<>();
- public ImageViewPager(Context context, List<Shopping> shoppingList) {
- this.context = context;
- this.shoppingList = shoppingList;
- //循环shoppingList,为图像集合赋值
- for (Shopping shopping : shoppingList) {
- ImageView imageView = new ImageView(context);
- //为试图设置宽高
- imageView.setLayoutParams(new AbsListView.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT,
- LinearLayout.LayoutParams.WRAP_CONTENT
- ));
- imageView.setImageResource(shopping.pic);//添加图像
- imageList.add(imageView);
- }
- }
- //获取页面个数
- @Override
- public int getCount() {
- return imageList.size();
- }
- //判断试图当前试图是否来自指定对象
- @Override
- public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
- return view == object;
- }
- //创建新的页面
- @NonNull
- @Override
- public Object instantiateItem(@NonNull ViewGroup container, int position) {
- ImageView imageView = imageList.get(position);
- container.addView(imageView);// 添加新的试图
- return imageView;
- }
- @Override
- public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
- container.removeView(imageList.get(position));
- }
- }
这个是活动页面的Java代码
先创建刚刚创建的适配器类的对象,以及拿到翻页试图,将翻页试图添加到主页面上,最后再添加监听事件
- package com.example.chapter6;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.viewpager.widget.ViewPager;
- import android.os.Bundle;
- import android.widget.Toast;
- import com.example.chapter6.database.ImageViewPager;
- import com.example.chapter6.utils.Shopping;
- import java.util.ArrayList;
- public class ViewPagerActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
- private ArrayList<Shopping> shoppingArrayList;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_view_pager);
- ViewPager vp_content = findViewById(R.id.vp_content);
- //生成一个集合
- shoppingArrayList = Shopping.getShopping();
- //生成适配器
- ImageViewPager imageViewPager = new ImageViewPager(this, shoppingArrayList);
- vp_content.setAdapter(imageViewPager);//添加适配器
- vp_content.addOnPageChangeListener(this);//事件监听
- }
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- }
- //position表示当前划到那个页面
- @Override
- public void onPageSelected(int position) {
- Toast.makeText(this, "您的手机品牌是"+shoppingArrayList.get(position).name, Toast.LENGTH_SHORT).show();
- }
- //state取值说明:0表示静止,1表示滑动,2表示滑动完毕
- @Override
- public void onPageScrollStateChanged(int state) {
- }
- }
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"
- android:orientation="vertical">
- <androidx.viewpager.widget.ViewPager
- android:id="@+id/vp_content"
- android:layout_width="wrap_content"
- android:layout_height="370dp"/>
- </LinearLayout>
这就是翻页布局的设定
翻页标签栏
首先是在翻页标签中添加文字栏目,添加文本
- <?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"
- android:orientation="vertical">
- <androidx.viewpager.widget.ViewPager
- android:id="@+id/vp_content"
- android:paddingTop="100dp"
- android:layout_width="match_parent"
- android:layout_height="400dp">
- <!--文本-->
- <androidx.viewpager.widget.PagerTabStrip
- android:id="@+id/pas_btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </androidx.viewpager.widget.ViewPager>
- </LinearLayout>
但是这个文本也必须是androidx.viewpager.widget.PagerTabStrip设置,然后就是在Java中设置文本的属性
- package com.example.chapter6;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.viewpager.widget.PagerTabStrip;
- import androidx.viewpager.widget.ViewPager;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.util.TypedValue;
- import android.widget.Toast;
- import com.example.chapter6.database.ImageViewPager;
- import com.example.chapter6.utils.Shopping;
- import java.util.ArrayList;
- public class PagerTabActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
- private ArrayList<Shopping> shoppingArrayList;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_pager_tab_strib);
- //初始化标签
- createTitle();
- //初始化试图
- createPagerView();
- }
- //初始化标签
- private void createTitle() {
- PagerTabStrip pas_btn = findViewById(R.id.pas_btn);
- //设置标签的文本大小
- pas_btn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
- pas_btn.setTextColor(Color.BLACK);//设置文本的颜色
- }
- private void createPagerView() {
- ViewPager vp_content = findViewById(R.id.vp_content);
- shoppingArrayList = Shopping.getShopping();
- ImageViewPager imageViewPager = new ImageViewPager(this, shoppingArrayList);
- vp_content.setAdapter(imageViewPager);
- vp_content.addOnPageChangeListener(this);
- }
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- }
- @Override
- public void onPageSelected(int position) {
- Toast.makeText(this, "您的手机品牌是"+shoppingArrayList.get(position).name, Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onPageScrollStateChanged(int state) {
- }
- }
最后,就是在配置器中通过getPageTitle方法获得指定页面的标题文本
- //获得页面的标题
- @Nullable
- @Override
- public CharSequence getPageTitle(int position) {
- return shoppingList.get(position).name;
- }