Vertically slidable ViewPager2

ViewPager2 can be used instead ViewPager, is an improved version of ViewPager provide ViewPager and solve common problems. The most notable feature is the support of a vertical slide, in order to use ViewPager2, must first move the project to androidx, because ViewPager2 only have at androidx.

Then add dependency.

  implementation "androidx.viewpager2:viewpager2:1.0.0"

viewpager2 very simple to use, if you have used RecyclerView it's even easier,
start by writing layout

<?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>

Single view item

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

Effect of
Here Insert Picture Description
this time, if you want to slide vertically, it can be provided for ViewPager2 android in xml: orientation = "vertical" properties, may be provided in the code.

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

effect
Here Insert Picture Description

RecyclerView.Adapter

We learn BaseAdapter time, there are three forms getView, tease than ordinary, literary
amuse ratio: each time the system at all times getView to load xml.
Normal: multiplexing parameters convertView.
Arts: Writing ViewHolder reusable components.
The original design idea is RecyclerView.Adapter literary style, when used, to write its own ViewHolder class inheritance RecyclerView.ViewHolder, then indicated in the Adapter <VH>. Internal onCreateViewHolder is used to create ViewHolder. If the item is a multi-form layout, you need to return a different ViewHolder, more parameters viewType can judge, but to rewrite getItemViewType. onBindViewHolder it is called when data binding.

The ViewPager2 is also reuse the RecyclerView.Adapter to complete the work.
Here Insert Picture Description

notifyDataSetChanged

When the data changes, can be refreshed by notifyDataSetChanged RecyclerView.Adapter of.

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


}

effect
Here Insert Picture Description

Published 42 original articles · won praise 7 · views 7722

Guess you like

Origin blog.csdn.net/HouXinLin_CSDN/article/details/104440001