本篇主要介绍一下viewpager2 的基本使用 ,并且实现一个滑动图片的功能
概述
ViewPager2 是一个以可滑动的格式显示视图或 Fragment
, ViewPager2 使用来替代 ViewPager的, 就是ViewPager控件写的不好 用来重写它的 , ViewPager2 依赖 RecycleView , 而 ViewPager 只需要PagerAdapter ,下面我用一个demo演示一下 ViewPager2的基本用法
实现思路
1.布局文件中引入 ViewPager2
2.编写 RecycleView 的 子item 布局
3.编写 ViewPage2Adapter 继承自 RecyclerView.Adapter
下面来用实际代码实现一个滑动的图片
代码实现
布局文件中引入ViewPager2
简单的把 viewPager2控制在屏幕上部分
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".ViewPage2Activity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpage2"
android:layout_width="match_parent"
android:layout_height="250dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
编写 RecycleView 的 子item 布局
子布局就是一个imageview 展示图片
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageviewitem"
android:src="@drawable/hippopx"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:scaleType="centerCrop"
android:layout_margin="30dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
编写 ViewPage2Adapter 继承自 RecyclerView.Adapter
package com.johnny.slzzing;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ViewPage2Activity extends AppCompatActivity {
private static final String TAG = "ViewPage2Activity";
ViewPager2 viewPager2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_page2);
viewPager2 = findViewById(R.id.viewpage2);
ViewPage2Adapter viewPage2Adapter = new ViewPage2Adapter(initImageViews());
viewPager2.setAdapter(viewPage2Adapter);
}
//初始化图片
private List<Integer> initImageViews() {
return Arrays.asList(R.drawable.hippopx,R.drawable.zhu,R.drawable.sky);
}
//编写 viewpager2的 adapter
class ViewPage2Adapter extends RecyclerView.Adapter<ViewPage2Adapter.MyViewHolder>{
private List<Integer> imageViewResources;
public ViewPage2Adapter(List<Integer> imageViewResources) {
this.imageViewResources = imageViewResources;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//inflate 子布局
return new MyViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.viewpage2_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
int imageResource = imageViewResources.get(position);
holder.imageView.setImageResource(imageResource);
Log.d(TAG, "onBindViewHolder: onBindViewHolder" + position);
}
@Override
public int getItemCount() {
return imageViewResources == null ? 0: imageViewResources.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageviewitem);
}
}
}
}
总结
本篇主要介绍了 ViewPager2 的基本使用, 利用它可以很轻松的实现滑动的效果, ViewPager2也可以结合Fragment, BottomNavigationView 等等 有机会再聊.
原文始发于微信公众号(Johnny屋):Android ViewPager2 的基本使用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89829.html