翻页试图的详细介绍

要想实现翻页的效果,就必须创建一个实现PagerAdapter的类,从PagerAdapter派生的翻页适配器的6个方法:

getCount:这个方法是获得页面的个数

IsviewFromObject :判断当前试图是否来自指定对象

destroyItem 销毁当前页面试图,翻页到下一个页面

instantiateItem 创建新的页面

Java代码

首先是Java代码中的适配器的创建,创建一个这样的类,继承PagerAdapter类,然后构造方法,以及其他的四个类

其中的一个属性,就是图片集合,这个集合通过在构造方法中通过遍历工具类中的数据,然后得到数据传入到图片集合中。

  1. package com.example.chapter6.database;
  2. import android.content.Context;
  3. import android.view.View;
  4. import android.view.ViewGroup;
  5. import android.widget.AbsListView;
  6. import android.widget.ImageView;
  7. import android.widget.LinearLayout;
  8. import androidx.annotation.NonNull;
  9. import androidx.annotation.Nullable;
  10. import androidx.viewpager.widget.PagerAdapter;
  11. import com.example.chapter6.utils.Shopping;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. public class ImageViewPager extends PagerAdapter {
  15.     private final Context context;
  16.     private List<Shopping> shoppingList;
  17.     //声明一个关于图像的集合
  18.     private List<ImageView> imageList = new ArrayList<>();
  19.     public ImageViewPager(Context context, List<Shopping> shoppingList) {
  20.         this.context = context;
  21.         this.shoppingList = shoppingList;
  22.         //循环shoppingList,为图像集合赋值
  23.         for (Shopping shopping : shoppingList) {
  24.             ImageView imageView = new ImageView(context);
  25.             //为试图设置宽高
  26.             imageView.setLayoutParams(new AbsListView.LayoutParams(
  27.                     LinearLayout.LayoutParams.MATCH_PARENT,
  28.                     LinearLayout.LayoutParams.WRAP_CONTENT
  29.             ));
  30.             imageView.setImageResource(shopping.pic);//添加图像
  31.             imageList.add(imageView);
  32.         }
  33.     }
  34.     //获取页面个数
  35.     @Override
  36.     public int getCount() {
  37.         return imageList.size();
  38.     }
  39.     //判断试图当前试图是否来自指定对象
  40.     @Override
  41.     public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
  42.         return view == object;
  43.     }
  44.     //创建新的页面
  45.     @NonNull
  46.     @Override
  47.     public Object instantiateItem(@NonNull ViewGroup container, int position) {
  48.         ImageView imageView = imageList.get(position);
  49.         container.addView(imageView);// 添加新的试图
  50.         return imageView;
  51.     }
  52.     @Override
  53.     public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
  54.         container.removeView(imageList.get(position));
  55.     }
  56. }

这个是活动页面的Java代码

先创建刚刚创建的适配器类的对象,以及拿到翻页试图,将翻页试图添加到主页面上,最后再添加监听事件

  1. package com.example.chapter6;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import androidx.viewpager.widget.ViewPager;
  4. import android.os.Bundle;
  5. import android.widget.Toast;
  6. import com.example.chapter6.database.ImageViewPager;
  7. import com.example.chapter6.utils.Shopping;
  8. import java.util.ArrayList;
  9. public class ViewPagerActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
  10.     private ArrayList<Shopping> shoppingArrayList;
  11.     @Override
  12.     protected void onCreate(Bundle savedInstanceState) {
  13.         super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.activity_view_pager);
  15.         ViewPager vp_content = findViewById(R.id.vp_content);
  16.         //生成一个集合
  17.         shoppingArrayList = Shopping.getShopping();
  18.         //生成适配器
  19.         ImageViewPager imageViewPager = new ImageViewPager(this, shoppingArrayList);
  20.         vp_content.setAdapter(imageViewPager);//添加适配器
  21.         vp_content.addOnPageChangeListener(this);//事件监听
  22.     }
  23.     @Override
  24.     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  25.     }
  26.     //position表示当前划到那个页面
  27.     @Override
  28.     public void onPageSelected(int position) {
  29.         Toast.makeText(this, "您的手机品牌是"+shoppingArrayList.get(position).name, Toast.LENGTH_SHORT).show();
  30.     }
  31.     //state取值说明:0表示静止,1表示滑动,2表示滑动完毕
  32.     @Override
  33.     public void onPageScrollStateChanged(int state) {
  34.     }
  35. }

xml属性文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:orientation="vertical">
  8.     <androidx.viewpager.widget.ViewPager
  9.         android:id="@+id/vp_content"
  10.         android:layout_width="wrap_content"
  11.         android:layout_height="370dp"/>
  12. </LinearLayout>

这就是翻页布局的设定

翻页标签栏

首先是在翻页标签中添加文字栏目,添加文本

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:orientation="vertical">
  8.     <androidx.viewpager.widget.ViewPager
  9.         android:id="@+id/vp_content"
  10.         android:paddingTop="100dp"
  11.         android:layout_width="match_parent"
  12.         android:layout_height="400dp">
  13.         <!--文本-->
  14.         <androidx.viewpager.widget.PagerTabStrip
  15.             android:id="@+id/pas_btn"
  16.             android:layout_width="wrap_content"
  17.             android:layout_height="wrap_content" />
  18.     </androidx.viewpager.widget.ViewPager>
  19. </LinearLayout>

但是这个文本也必须是androidx.viewpager.widget.PagerTabStrip设置,然后就是在Java中设置文本的属性

  1. package com.example.chapter6;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import androidx.viewpager.widget.PagerTabStrip;
  4. import androidx.viewpager.widget.ViewPager;
  5. import android.graphics.Color;
  6. import android.os.Bundle;
  7. import android.util.TypedValue;
  8. import android.widget.Toast;
  9. import com.example.chapter6.database.ImageViewPager;
  10. import com.example.chapter6.utils.Shopping;
  11. import java.util.ArrayList;
  12. public class PagerTabActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
  13.     private ArrayList<Shopping> shoppingArrayList;
  14.     @Override
  15.     protected void onCreate(Bundle savedInstanceState) {
  16.         super.onCreate(savedInstanceState);
  17.         setContentView(R.layout.activity_pager_tab_strib);
  18.         //初始化标签
  19.         createTitle();
  20.         //初始化试图
  21.         createPagerView();
  22.     }
  23.     //初始化标签
  24.     private void createTitle() {
  25.         PagerTabStrip pas_btn = findViewById(R.id.pas_btn);
  26.         //设置标签的文本大小
  27.         pas_btn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
  28.         pas_btn.setTextColor(Color.BLACK);//设置文本的颜色
  29.     }
  30.     private void createPagerView() {
  31.         ViewPager vp_content = findViewById(R.id.vp_content);
  32.         shoppingArrayList = Shopping.getShopping();
  33.         ImageViewPager imageViewPager = new ImageViewPager(this, shoppingArrayList);
  34.         vp_content.setAdapter(imageViewPager);
  35.         vp_content.addOnPageChangeListener(this);
  36.     }
  37.     @Override
  38.     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  39.     }
  40.     @Override
  41.     public void onPageSelected(int position) {
  42.         Toast.makeText(this, "您的手机品牌是"+shoppingArrayList.get(position).name, Toast.LENGTH_SHORT).show();
  43.     }
  44.     @Override
  45.     public void onPageScrollStateChanged(int state) {
  46.     }
  47. }

最后,就是在配置器中通过getPageTitle方法获得指定页面的标题文本

  1. //获得页面的标题
  2.     @Nullable
  3.     @Override
  4.     public CharSequence getPageTitle(int position) {
  5.         return shoppingList.get(position).name;
  6.     }

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值