ViewPager2はViewPager代わりに使用することができ、ViewPagerの改良版はViewPagerを提供し、一般的な問題の解決です。最も顕著な特徴は、ViewPager2のみandroidxで持っているので、ViewPager2を使用するためには、まず、androidxにプロジェクトを移動する必要があり、縦スライドのサポートです。
そして、依存関係を追加します。
implementation "androidx.viewpager2:viewpager2:1.0.0"
viewpager2あなたがRecyclerView使用している場合、それはさらに簡単です、使用することは非常に簡単で、
レイアウトを書き込むことによって開始します
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/shadow_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_height="match_parent"></androidx.viewpager2.widget.ViewPager2>
</LinearLayout>
シングルビューアイテム
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:scaleType="centerCrop"
android:id="@+id/imageview"
android:layout_width="match_parent"
android:layout_height="match_parent"></ImageView>
</LinearLayout>
MainActivity
package com.hxl.gongzhonghaodemo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
String[] url ={
"https://pic1.zhimg.com/80/v2-d90f73dc5a5cd06756ea820b1380aabd_hd.jpg",
"https://c-ssl.duitang.com/uploads/item/201505/09/20150509171654_dGsCB.jpeg",
"https://c-ssl.duitang.com/uploads/item/201509/17/20150917153109_svQch.jpeg"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager2 viewPager2 = (ViewPager2) findViewById(R.id.viewpager2);
viewPager2.setAdapter(new RecyclerView.Adapter<ViewPagerViewHolder>() {
@NonNull
@Override
public ViewPagerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_viewapger, parent,false);
return new ViewPagerViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull ViewPagerViewHolder holder, int position) {
getBitmapFromUrl(holder.mImageView,url[position]);
}
@Override
public int getItemCount() {
return url.length;
}
});
}
//加载图片
private void getBitmapFromUrl(ImageView imageView,String str){
new Thread(() -> {
try {
URL url =new URL(str);
Bitmap bitmap = BitmapFactory.decodeStream(url.openStream());
imageView.post(() -> imageView.setImageBitmap(bitmap));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
class ViewPagerViewHolder extends RecyclerView.ViewHolder{
public ImageView mImageView;
public ViewPagerViewHolder(@NonNull View itemView) {
super(itemView);
mImageView=itemView.findViewById(R.id.imageview);
}
}
}
効果
あなたが縦にスライドする場合は、この時間は、それがViewPager2に提供することができるXMLでアンドロイド:オリエンテーション=「縦」プロパティは、コードで提供されてもよいです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/shadow_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.viewpager2.widget.ViewPager2
android:orientation="vertical"
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_height="match_parent"></androidx.viewpager2.widget.ViewPager2>
</LinearLayout>
viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
効果
RecyclerView.Adapter
私たちは三つの形式getViewメソッド、通常、文学よりもいじめがあり、BaseAdapter時間を知る
たびにシステム負荷のxmlに常にgetViewメソッドで:アミューズ比は。
ノーマル:多重化パラメータconvertView。
アーツ:ライティングViewHolder再利用可能なコンポーネント。
オリジナルデザインのアイデアはRecyclerView.ViewHolder継承独自のViewHolderクラスを記述するために、使用され、その後、アダプタ<VH>に示されているとき、RecyclerView.Adapter文学スタイルです。内部onCreateViewHolderはViewHolderを作成するために使用されます。項目は、マルチフォーム・レイアウトである場合は、別のViewHolderを返す必要があり、より多くのパラメータビュータイプを判断することができますが、getItemViewTypeを書き換えます。データをバインドするときに、それが呼ばれるonBindViewHolder。
ViewPager2も作業を完了するためにRecyclerView.Adapterを再利用しています。
notifyDataSetChanged
データが変更された場合、のnotifyDataSetChanged RecyclerView.Adapterでリフレッシュすることができます。
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
ViewPager2 viewPager2;
private RecyclerView.Adapter mAdapter;
String[] url ={
"https://pic1.zhimg.com/80/v2-d90f73dc5a5cd06756ea820b1380aabd_hd.jpg",
"https://c-ssl.duitang.com/uploads/item/201505/09/20150509171654_dGsCB.jpeg",
"https://c-ssl.duitang.com/uploads/item/201509/17/20150917153109_svQch.jpeg"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager2 = (ViewPager2) findViewById(R.id.viewpager2);
viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
mAdapter=new RecyclerView.Adapter<ViewPagerViewHolder>() {
@NonNull
@Override
public ViewPagerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_viewapger, parent,false);
return new ViewPagerViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull ViewPagerViewHolder holder, int position) {
getBitmapFromUrl(holder.mImageView,url[position]);
}
@Override
public int getItemCount() {
return url.length;
}
};
viewPager2.setAdapter(mAdapter);
}
private void getBitmapFromUrl(ImageView imageView,String str){
new Thread(() -> {
try {
URL url =new URL(str);
Bitmap bitmap = BitmapFactory.decodeStream(url.openStream());
imageView.post(() -> imageView.setImageBitmap(bitmap));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
public void onBtnClick(View view) {
url[0]="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1561029846,2504603863&fm=26&gp=0.jpg";
mAdapter.notifyDataSetChanged();
}
class ViewPagerViewHolder extends RecyclerView.ViewHolder{
public ImageView mImageView;
public ViewPagerViewHolder(@NonNull View itemView) {
super(itemView);
mImageView=itemView.findViewById(R.id.imageview);
}
}
}
効果