Android如何实现自动变换大小的组件ViewPager2

您所在的位置:网站首页 pagetransformer Android如何实现自动变换大小的组件ViewPager2

Android如何实现自动变换大小的组件ViewPager2

2023-03-22 20:34| 来源: 网络整理| 查看: 265

Android如何实现自动变换大小的组件ViewPager2 发布时间:2023-03-20 14:43:27 来源:亿速云 阅读:99 作者:iii 栏目:开发技术

本篇内容介绍了“Android如何实现自动变换大小的组件ViewPager2”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

ViewPager2的概念

ViewPager2是一个翻页视图组件

ViewPager2能做什么

支持垂直方向的滑动且实现极其简单。

完全支持RecyclerView的相关配置功能。

支持多个PageTransformer。

支持DiffUtil,局部数据刷新和Item动画。

支持模拟用户滑动与禁止用户操作。

ViewPager2的用法

因为ViewPager2是基于RecyclerView的,所以在使用上与RecyclerView的使用基本一致

ViewPager2常用的API

 1. setAdapter()   为viewpager2设置是配置 2. setOrientation()  设置视图翻页的方向,可以设置垂直方向,也可以设置水平方向。 3. setPageTransformer() 设置翻页的动画

举个简单的例子,adapter部分的代码省略了

第一步: activity_main.xml

// 第一步: activity_main.xml          

第二步:创建适配器的视图

// 第二步:创建适配器的视图          

第三步: 创建适配器adapter

// 第三步:创建适配器adapter public class viewpagerAdapter extends RecyclerView.Adapter {     // 声明一个上下文对象     private Context mContext;      // 声明一个商品列表,用于渲染adapter     private List mGoodsList = new ArrayList();      // 函数构造     public viewpagerAdapter(Context context, List goodsList) {         mContext = context;         mGoodsList = goodsList;     }     // 创建列表项的视图持有者     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup vg, int viewType) {         // 根据布局文件item_mobile.xml生成视图对象         View v = LayoutInflater.from(mContext).inflate(R.layout.item_mobile, vg, false);         return new ItemHolder(v);     }     // 绑定列表项的视图持有者     public void onBindViewHolder(RecyclerView.ViewHolder vh, final int position) {         ItemHolder holder = (ItemHolder) vh;         holder.iv_pic.setImageResource(mGoodsList.get(position).pic);         holder.tv_desc.setText(mGoodsList.get(position).desc);     }     // 定义列表项的视图持有者     public class ItemHolder extends RecyclerView.ViewHolder {         public ImageView iv_pic; // 声明列表项图标的图像视图         public TextView tv_desc; // 声明列表项描述的文本视图         public ItemHolder(View v) {             super(v);             iv_pic = v.findViewById(R.id.iv_pic);             tv_desc = v.findViewById(R.id.tv_desc);         }     } }

第四步:书写MainAcvitivity.java,调用ViewPager的API

//第四步:书写MainAcvitivity.java,调用ViewPager的API public class MainActivity extends AppCompatActivity {     private List viewPagerList = new ArrayList();     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         initData();         // 从布局文件中获取翻页视图         ViewPager2 viewPager2 = findViewById(R.id.view_pager);         // 构建适配器         viewpagerAdapter vpa = new viewpagerAdapter(viewPagerList);         // 设置翻页视图的排列方向为水平方向         viewPager2.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);         // 为翻页视图添加适配器         viewPager2.setAdapter(vpa);     }     private void initData(){             GoodsInfo g1 = new GoodsInfo("123", R.drawable.cloudy);             viewPagerList.add(g1);             GoodsInfo g2 = new GoodsInfo("456", R.drawable.moon);             viewPagerList.add(g2);             GoodsInfo g3 = new GoodsInfo("789", R.drawable.sunny);             viewPagerList.add(g3);     } }

有没有发现,这个和recycleView的写法一摸一样。

ViewPager2与fragment结合使用

第一步:activity_main.xml视图

// 第一步:activity_main.xml视图            

第二步:创建fragment所需要的视图fragment_blank.xml

         

第三步:fragment所需的代码

public class BlankFragment extends Fragment {     private static final String ARG_PARAM1 = "param1";     String mTextString = "xxx";     View rootView;     public static BlankFragment newInstance(String param1) {         BlankFragment fragment = new BlankFragment();         Bundle args = new Bundle();         args.putString(ARG_PARAM1, param1);         fragment.setArguments(args);         return fragment;     }     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         if (getArguments() != null) {             mTextString = getArguments().getString(ARG_PARAM1);         }     }     @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,                              Bundle savedInstanceState) {         if(rootView == null) {             rootView = inflater.inflate(R.layout.fragment_blank, container, false);         }         initView();         return rootView;     }     private void initView() {         TextView textView = rootView.findViewById(R.id.mTextView);         textView.setText(mTextString);     } }

第四步:创建承载fragment所需要的适配器

public class MyFragmentAdapter extends FragmentStateAdapter {     List fragments = new ArrayList();     public MyFragmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, List fragments) {         super(fragmentManager, lifecycle);         this.fragments = fragments;     }     @NonNull     @Override     public Fragment createFragment(int position) {         return fragments.get(position);     }     @Override     public int getItemCount() {         return fragments.size();     } }

第五步:书写MainAcvitivity.java,调用ViewPager的API

public class MainActivity extends AppCompatActivity {     ViewPager2 viewPager2;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         initPage();     }     private void initPage() {         List fragments = new ArrayList();         fragments.add(BlankFragment.newInstance("fragment1"));         fragments.add(BlankFragment.newInstance("fragment2"));         fragments.add(BlankFragment.newInstance("fragment3"));         fragments.add(BlankFragment.newInstance("fragment4"));         viewPager2 = findViewById(R.id.myViewPager);         viewPager2.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(),                 getLifecycle(),fragments));     } }ViewPager2与导航栏配合使用

代码简写,只写相关的部分

// activity_main.xml 写上用到的两个组件TabLayout与ViewPager2                                                public class MainActivity extends AppCompatActivity {     ViewPager2 viewPager2;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         initPage();     }     private void initPage() {         List fragments = new ArrayList();         fragments.add(BlankFragment.newInstance("fragment1"));         fragments.add(BlankFragment.newInstance("fragment2"));         fragments.add(BlankFragment.newInstance("fragment3"));         fragments.add(BlankFragment.newInstance("fragment4"));         viewPager2 = findViewById(R.id.myViewPager);         viewPager2.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(),                 getLifecycle(),fragments)); //绑定使用 new TabLayoutMediator(findViewById(R.id.mTabLayout),viewPager2,new TabLayoutMediator.TabConfigurationStrategy(){             @Override             public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {                 switch (position){                     case 0:                         tab.setText("1");                         break;                     case 1:                         tab.setText("2");                         break;                     case 2:                         tab.setText("3");                         break;                 }             }         }).attach();     } }

“Android如何实现自动变换大小的组件ViewPager2”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读: idea下Android各目录所代表的含义是什么 Android中如何实现移动端页面强制竖屏

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

android viewpager2 上一篇新闻:MySQL中不等号索引问题怎么解决 下一篇新闻:MySQL怎么给字符串加一个高效索引 猜你喜欢 WebFlux 前置知识有哪些 Spring Security5.5支持OAuth2.0第五种授权模式是什么 Nacos客户端是如何在SpringCloud进行集成和实现的 微前端架构的示例分析 如何使用Loki监控SpringBoot应用 Sentinel流控规则的介绍 Spring中的配置怎么保证可扩展性 应对高并发的方法有哪些 如何用SpringCloud Alibaba实现业务日志组件 如何用Asyncio协程构建高并发应用


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3