ViewPager2使⽤讲解
之前早有⽿闻 Google 为我们提供新的控件来替换⽼旧的 ViewPager 进⽽解决⼀些不好解决的bug问题,巴拉巴拉⼀⼤堆,就是前因后果啥的…相信读者已经在“张鸿洋”⼤神、“郭霖”⼤神或者是其他Android ⼤佬的那⾥看见了许许多多了,或许各位感觉很⽆聊了,笔者菜鸟,分析不了历史背景,也不是很懂源码,但是⼩菜鸟,可以带给位看官尝个鲜,教你怎么⽤,怎么上⼿哈,闲话不多说,我们步⼊正题。
⼀、效果
⼆、介绍必要基础知识
1、ViewPager 与 ViewPager2 部分对⽐
ViewPager ViewPager 2
PagerAdapter RecyclerView.Adapter
FragmentStatePagerAdapter FragmentStateAdapter
addPageChangeListener registerOnPageChangeCallback
⽆从右到左 (RTL) 的布局⽀持
⽆垂直⽅向⽀持
⽆停⽤⽤户输⼊的功能(setUserInputEnabled、isUserInputEnabled)
2、部分基础知识
ViewPager 2 底层是⽤ RecycleView 实现
三、撰写功能
1、依赖引⼊
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'lerview:recyclerview:1.1.0' // ViewPager 2 需要使⽤ RecycleView 的 adapter
2、实现横向滑动效果
1)、实现效果
2)、代码实现
a、布局
Activity 布局内 就⼀个 ViewPager 2控件
item 界⾯就⼀个textView
就不展⽰了
b、逻辑
ample.viewpager2.horizontal;
import android.annotation.SuppressLint;
t.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
lerview.widget.RecyclerView;
ample.viewpager2.R;
import java.util.ArrayList;
import java.util.List;
/**
* CreateTime: 2020/1/15 15:06
* Author: hxd
* Content:
* UpdateTime:
* UpdateName;
* UpdateContent:
*/
public class HorizontalVpAdapter extends RecyclerView.Adapter<HorizontalVpAdapter.HorizontalVpViewHolder> {
private List<Integer> backgrounds;
private Context mContext;
HorizontalVpAdapter(Context context) {
mContext = context;
if (backgrounds == null) {
backgrounds = new ArrayList<>();
backgrounds.add(lor.holo_blue_bright);
backgrounds.add(lor.holo_red_dark);
backgrounds.add(lor.holo_green_dark);
backgrounds.add(lor.holo_orange_light);
backgrounds.add(lor.holo_purple);
}
}
@NonNull
@Override
public HorizontalVpViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new HorizontalVpViewHolder(LayoutInflater.from(mContext).inflate((R.layout.item_h_v), parent, false));
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull HorizontalVpViewHolder holder, int position) {
holder.mTextView.setText("第  " + (position + 1) + " 界⾯");
holder.mLinearLayout.(position));
}
@Override
public int getItemCount() {
if (backgrounds == null) {
return 0;
}
return backgrounds.size();
}
class HorizontalVpViewHolder extends RecyclerView.ViewHolder {
LinearLayout mLinearLayout;
TextView mTextView;
HorizontalVpViewHolder(@NonNull View itemView) {
super(itemView);
mLinearLayout = itemView.findViewById(R.id.ll_h_v);
mTextView = itemView.findViewById(R.id.tv_hv);
}
}
}
适配器逻辑如上,因为 ViewPager 2 底层使⽤ RecycleView 实现的,所以这⾥不再使⽤ PagerAdapter ⽽是使⽤了RecyclerView.Adapter 这也是 引⼊RecycleView 依赖的原因所在。
public class HorizontalActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_horizontal);
ViewPager2 viewPager2 = findViewById(R.id.vp_h);
HorizontalVpAdapter adapter = new HorizontalVpAdapter(this);
viewPager2.setAdapter(adapter);
}
}
android radiogroup
Activity 内的代码就没什么不同了和之前⼀样的两步⾛,初始化控件,设置适配器。
3、纵向滑动效果
1)、实现效果
2)、代码逻辑
a、布局
Activity 的布局需要拿出
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/vp_v"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" />
布局内的 android:orientation="vertical" 控制横向和纵向滑动 有点类似于 LinearLayout
b、逻辑
public class VerticalActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_vertical);
ViewPager2 viewPager2 = findViewById(R.id.vp_v);
VerticalVpAdapter adapter = new VerticalVpAdapter(this);
viewPager2.setAdapter(adapter);
viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
}
}
Activity 内的viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);可以实现 xml 内的android:orientation="vertical"相同效果。
4、RadioGroup 与 ViewPager 2 连⽤
1)、实现效果
2)、代码逻辑
a、布局
Activity 布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="schemas.android/apk/res/android"    xmlns:tools="schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".withRadioGroup.RgActivity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/vp_rg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/rg_vp" />
<RadioGroup
android:id="@+id/rg_vp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_home"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:checked="true"
android:drawableTop="@drawable/selector_home"
android:drawablePadding="5dp"
android:gravity="center"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:text="@string/home"
android:textColor="@color/selector_rg"
android:textSize="16sp" />

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。