縦方向にスライド可能ViewPager2

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);
        }
    }


}

効果
ここに画像を挿入説明

公開された42元の記事 ウォン称賛7 ビュー7722

おすすめ

転載: blog.csdn.net/HouXinLin_CSDN/article/details/104440001