• 安卓基础学习 Day 20|安卓高级控件---翻页视图


    目录

    翻页视图(ViewPager) 

    提出要求

    保存图片

    主布局资源文件

    实体类

    适配器类

    主界面

    翻页标签栏(PagerTabStrip)

    提出要求

    主布局资源

    主界面


    翻页视图(ViewPager) 

    翻页视图允许页面在水平方向左右滑动

    提出要求

    保存图片

    我这里将图片放在mipmap中的,也可以放在drawable

    放在drawable中的直接修改实体类

     

    主布局资源文件

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

    实体类

    关于商品的图片和名称信息

    1. import java.util.ArrayList;
    2. public class GoodsInfo {
    3. public int id;
    4. public String name;//名称
    5. public String picPath;//大图的保存路径
    6. public int pic;//大图的资源编号
    7. //声明一个手机商品的名称数组
    8. private static String[] mNameArray = {
    9. "iPhone11", "Mate30", "小米10", "OPPO Reno3", "vivo X30", "荣耀30S"
    10. };
    11. //图片
    12. private static int[] mPicArray = {
    13. R.mipmap.iphone11, R.mipmap.mate30, R.mipmap.xiaomi10,
    14. R.mipmap.opporeno3, R.mipmap.vivox30, R.mipmap.rongyao30
    15. };
    16. public static ArrayList<GoodsInfo> getDefaultList() {
    17. ArrayList<GoodsInfo> goodsList = new ArrayList<>();
    18. for (int i = 0; i < mNameArray.length; i++) {
    19. GoodsInfo info = new GoodsInfo();
    20. info.id = i;
    21. info.name = mNameArray[i];
    22. info.pic = mPicArray[i];
    23. goodsList.add(info);
    24. }
    25. return goodsList;
    26. }
    27. }

    适配器类

    1. import android.content.Context;
    2. import android.view.View;
    3. import android.view.ViewGroup;
    4. import android.widget.ImageView;
    5. import androidx.annotation.NonNull;
    6. import androidx.viewpager.widget.PagerAdapter;
    7. import java.util.ArrayList;
    8. import java.util.List;
    9. public class ImagePagerAdapater extends PagerAdapter {
    10. private final Context mContext;
    11. private final ArrayList<GoodsInfo> mGoodsList;
    12. //声明一个图像试图列表
    13. private List<ImageView> mViewList = new ArrayList<>();
    14. public ImagePagerAdapater(Context mContext, ArrayList<GoodsInfo> mGoodsList) {
    15. this.mContext = mContext;
    16. this.mGoodsList = mGoodsList;
    17. //给每个商品分配一个专用的图像视图
    18. for (GoodsInfo info : mGoodsList) {
    19. ImageView view = new ImageView(mContext);
    20. //设置宽高
    21. view.setLayoutParams(new ViewGroup.LayoutParams(
    22. ViewGroup.LayoutParams.MATCH_PARENT,
    23. ViewGroup.LayoutParams.WRAP_CONTENT
    24. ));
    25. view.setImageResource(info.pic);
    26. mViewList.add(view);
    27. }
    28. }
    29. @Override
    30. public int getCount() {
    31. return mViewList.size();
    32. }
    33. @Override
    34. public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    35. return view == object;
    36. }
    37. //实例化指定位置的页面,并将其添加到容器中
    38. @NonNull
    39. @Override
    40. public Object instantiateItem(@NonNull ViewGroup container, int position) {//初始化
    41. //添加一个view到container中,而后返回到一个跟这个view可以关联起来的对象
    42. //这个对象可以是view自生,也能够是其余对象
    43. //关键是在isViewFromObject可以将view和这个object关联起来
    44. ImageView item = mViewList.get(position);
    45. container.addView(item);
    46. return item;
    47. }
    48. //从容器中销毁指定位置的页面
    49. @Override
    50. public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {//销毁
    51. container.removeView(mViewList.get(position));
    52. }
    53. }

    主界面

    1. import androidx.appcompat.app.AppCompatActivity;
    2. import androidx.viewpager.widget.ViewPager;
    3. import android.os.Bundle;
    4. import android.widget.Toast;
    5. import java.util.ArrayList;
    6. public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
    7. ArrayList<GoodsInfo> mGoodsList;
    8. @Override
    9. protected void onCreate(Bundle savedInstanceState) {
    10. super.onCreate(savedInstanceState);
    11. setContentView(R.layout.activity_main);
    12. ViewPager vp_content = findViewById(R.id.vp_content);
    13. mGoodsList = GoodsInfo.getDefaultList();
    14. ImagePagerAdapater adapter = new ImagePagerAdapater(this, mGoodsList);
    15. vp_content.setAdapter(adapter);
    16. // 给翻页视图添加一个页面变更监听器
    17. vp_content.addOnPageChangeListener(this);
    18. }
    19. // 翻页状态改变时触发。state取值说明:0表示静止,1表示正在滑动,2表示滑动完毕
    20. // 在翻页过程中,状态值变化依次为:正在滑动-->滑动完毕-->静止
    21. @Override
    22. public void onPageScrollStateChanged(int state) {
    23. }
    24. // 在翻页过程中触发。该方法的三个参数取值说明:
    25. // 第一个参数表示当前页面的序号;
    26. // 第二个参数表示页面偏移的百分比,取值为0到1;
    27. // 第三个参数表示页面的偏移距离
    28. @Override
    29. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    30. }
    31. //在翻页结束后触发,position表示当前滑倒了哪一个界面
    32. @Override
    33. public void onPageSelected(int position) {
    34. Toast.makeText(MainActivity.this, "您当前浏览的手机品牌是" + mGoodsList.get(position).name, Toast.LENGTH_SHORT).show();
    35. }
    36. }

    实现效果

    翻页标签栏(PagerTabStrip)

    翻页标签栏能够在翻页视图上方显示页面标题,点击页面标题即可切换到对应页面

    提出要求

    主布局资源

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

    这里的实体类和上面的一样

    适配器类发生了小小的修改

    添加上这个获取标签栏上的内容 

    主界面

    1. import androidx.appcompat.app.AppCompatActivity;
    2. import androidx.viewpager.widget.PagerTabStrip;
    3. import androidx.viewpager.widget.ViewPager;
    4. import android.graphics.Color;
    5. import android.os.Bundle;
    6. import android.util.TypedValue;
    7. import android.widget.Toast;
    8. import java.util.ArrayList;
    9. public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
    10. ArrayList<GoodsInfo> mGoodsList;
    11. @Override
    12. protected void onCreate(Bundle savedInstanceState) {
    13. super.onCreate(savedInstanceState);
    14. setContentView(R.layout.activity_main);
    15. initPagerStrip();
    16. initViewPager();
    17. }
    18. //初始化翻页标签
    19. private void initViewPager() {
    20. PagerTabStrip pts_tap = findViewById(R.id.pts_tap);
    21. //设置翻页标签栏的文本大小
    22. pts_tap.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
    23. // 设置翻页标签栏的颜色
    24. pts_tap.setTextColor(Color.BLACK);
    25. }
    26. //初始化翻页视图
    27. private void initPagerStrip() {
    28. ViewPager vp_content = findViewById(R.id.vp_content);
    29. mGoodsList = GoodsInfo.getDefaultList();
    30. ImagePagerAdapater adapter = new ImagePagerAdapater(this, mGoodsList);
    31. vp_content.setAdapter(adapter);
    32. // 给翻页视图添加一个页面变更监听器
    33. vp_content.addOnPageChangeListener(this);
    34. }
    35. @Override
    36. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    37. }
    38. @Override
    39. public void onPageSelected(int position) {
    40. Toast.makeText(MainActivity.this, "您当前浏览的手机品牌是" + mGoodsList.get(position).name, Toast.LENGTH_SHORT).show();
    41. }
    42. @Override
    43. public void onPageScrollStateChanged(int state) {
    44. }
    45. }

    实现效果

    简单的启动引导页

    当用户安装一个新应用时,首次启动大多出现欢迎页面,这个引导因为要往右翻好几页,才会进入应用主页,这种启动引导页就是通过翻页试图实现的。

     准备图片

    【明日继续更】

  • 相关阅读:
    stable diffusion实践操作-LyCORIS
    JSON端口操作实例
    接口自动化中cookies的处理技术
    【Leetcode】【每日一题】【中等】1465. 切割后面积最大的蛋糕
    wpf menu 菜单 快捷键
    线性代数 --- 四个基本子空间(个人学习笔记)
    C++——内联函数|auto关键字
    pytest-xdist分布式测试原理浅析
    drf-yasg 的 Swagger 文檔
    【Spring Boot】Day01
  • 原文地址:https://blog.csdn.net/m0_64018773/article/details/125621470