当前位置:网站首页>La différence entre viewpager 2 et viewpager et la mise en œuvre de la rotation viewpager 2

La différence entre viewpager 2 et viewpager et la mise en œuvre de la rotation viewpager 2

2022-07-07 09:35:00 Cheng @ @ Cheng



Préface:

2019DébutGooglePubliéViewPager2Aperçu,Et la même annéeI/OLancement de la version officielle.Tant que tu es passé deSupporLa Bibliothèque passe àAndroidX,Vous pouvez utiliserViewPager2Remplacer complètement l'ancienViewPager.

ViewPager2La caractéristique la plus remarquable est basée surRecyclerViewRéalisation,RecyclerViewOui, pour le moment.AndroidLe plus matureAdapterViewSolutions,Cela apporte beaucoup d'avantages:
1、Abandonner la traditionPagerAdapter,Unis.AdapterDeAPI/
2、AdoptionLinearLayoutManagerIl est possible de réaliser un glissement longitudinal semblable à un tremblement de terre
3、SoutienDiffUitl,Peut passerdiffActualiser localement
4、SoutienRTL(right-to-left)Mise en page,Pour ceux qui ont besoin d'aller en merAPPTrès utile.
5、SoutienItemDecorator


Un.、ViewPager2EtViewPagerComparaison:

1、ViewPager2La mise en œuvre interne estRecyclerView,Alors...ViewPager2Plus de performance.
2、ViewPager2 Le glissement vertical peut être réalisé ,ViewPager Glissement latéral seulement .
3、ViewPager2Un seuladapter,FragmentStateAdapterDeRecyclerView.Adapter.
EtViewPagerIl y en a deux.adapter,FragmentStatePagerAdapterEtFragmentPagerAdapter, C'est l'héritage PagerAdapter.FragmentStatePagerAdapterEtFragmentPagerAdapterLa différence estFragmentStatePagerAdapterImpossible de mettre en cache,FragmentPagerAdapterPeut être mis en cache.
4、ViewPager2 Le mode permet un chargement paresseux , Pas de précharge par défaut .L'intérieur passe parLifecycle C'est exact. Fragment Gestion du cycle de vie.ViewPager Le précharge est effectué , Le chargement paresseux exige que nous le fassions nous - mêmes .

ViewPager ViewPager2
AdapterViewPager RecyclerView.Adapter
Surveillance coulissanteaddPageChangeListenerregisterOnPageChangeCallback
AucuneDe droite à gauche (RTL) Support de mise en page pour
AucuneSupport vertical
Aucune Désactiver la fonction entrée par l'utilisateur (setUserInputEnabled、isUserInputEnabled)

2.、ViewPager2Utilisation de(Réalisation du diagramme de rotation)

1、Obtenir des résultats

Insérer la description de l'image ici

2、Code de mise en œuvre

a、XMLMise en page

    <RelativeLayout android:layout_width="match_parent" android:layout_height="200dp">
	
         <!--La carte de la rotation-->
        <androidx.viewpager2.widget.ViewPager2 android:id="@+id/homeFragment_view_banner" android:layout_width="match_parent" android:layout_height="200dp" android:orientation="horizontal" />

        <!-- Ponctuation inférieure -->
        <LinearLayout android:id="@+id/homeFragment_view_dot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="5dp"/>
    </RelativeLayout>

b、Adaptateur

Disposition de l'adaptateur

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" >

    <ImageView android:id="@+id/itemBanner_iv_img" android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="fitXY"/>
</RelativeLayout>

Code de l'adaptateur

public class BannerAdapter extends RecyclerView.Adapter<BannerAdapter.ViewHolder> {
    
    private Context context;
    private List<Integer> imgUrl;

    public  BannerAdapter(Context context,List<Integer> imgUrl){
    
        this.context = context;
        this.imgUrl = imgUrl;

    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout_banner,parent,false));
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    
        Glide.with(context).load(imgUrl.get(position)).into(holder.iv_img);
    }

    @Override
    public int getItemCount() {
    
        return imgUrl.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{
    

        ImageView iv_img;

        public ViewHolder(View itemView) {
    
            super(itemView);
            iv_img = itemView.findViewById(R.id.itemBanner_iv_img);
        }
    }
}

c、CompletActivityCode

UtiliserHandler Et thread pour réaliser la fonction de rotation ,UtiliserLinearLayoutAjouter dynamiquement des points.

 private ViewPager2 view_banner;
    private LinearLayout layout_dot;

    private List<Integer> imgUrl;
    private List<ImageView> dotList;

    private BannerAdapter bannerAdapter;


    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
    
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        initViews(view);
        return view;
    }
    /*  Quand l'application est réveillée , Laissez la carte de la roue commencer la roue  */
    @Override
    public void onResume() {
    
        super.onResume();
        handler.postDelayed(runnable,5000);
    }

    /*  Lorsque l'application est suspendue , Pour arrêter la roue  */
    @Override
    public void onPause() {
    
        super.onPause();
        handler.removeCallbacks(runnable);
    }

    private void initViews(View view) {
    
        view_banner = view.findViewById(R.id.homeFragment_view_banner);
        layout_dot= view.findViewById(R.id.homeFragment_view_dot);


        imgUrl = new ArrayList<>();
        dotList = new ArrayList<>();

        imgUrl.add(R.mipmap.aa);
        imgUrl.add(R.mipmap.ab);
        bannerAdapter = new BannerAdapter(context,imgUrl);
        view_banner.setAdapter(bannerAdapter);
        initIndicatorDots();


        // Enregistrez l'auditeur d'événements de défilement pour le diagramme de roue 
        view_banner.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
    
            @Override
            public void onPageSelected(int position) {
       // Lors de la rotation , Modifier le point d'indication 
                super.onPageSelected(position);
                for(int i = 0; i < dotList.size(); i++){
    
                    if(i==position){
    
                        dotList.get(i).setBackgroundResource(R.drawable.shape_dot_blue);
                    }else{
    
                        dotList.get(i).setBackgroundResource(R.drawable.shape_dot_gray);
                    }
                }
            }
        });
    }


    // Initialiser le point d'indication 
    private void initIndicatorDots(){
    
        for(int i = 0; i < imgUrl.size(); i++){
    
            ImageView imageView = new ImageView(context);
            if (i == 0) imageView.setBackgroundResource(R.drawable.shape_dot_blue);
            else imageView.setBackgroundResource(R.drawable.shape_dot_gray);

            // Ajouter un espacement pour les points indicateurs 
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
            layoutParams.setMargins(0,0,10,0);
            imageView.setLayoutParams(layoutParams);
            int index = i;
            imageView.setOnClickListener(new View.OnClickListener() {
    // Cliquez sur l'effet de clic pour basculer la fonction 
                @Override
                public void onClick(View v) {
    
                    view_banner.setCurrentItem(index);
                    for(ImageView iv :dotList){
    
                        iv.setBackgroundResource(R.drawable.shape_dot_gray);
                    }
                    v.setBackgroundResource(R.drawable.shape_dot_blue);

                }
            });
            dotList.add(imageView);
            layout_dot.addView(imageView);  // Ajouter un point d'indication au conteneur 
        }
    }



    private final Runnable runnable = new Runnable() {
    
        @Override
        public void run() {
    
            int currentPosition = view_banner.getCurrentItem();  // Obtenir l'emplacement actuel du diagramme de rotation 
            currentPosition++;
            if(currentPosition==imgUrl.size()){
    //Recommencer
                view_banner.setCurrentItem(0,true);
            }else{
    
                view_banner.setCurrentItem(currentPosition,true);
            }

            handler.postDelayed(runnable,5000);
        }
    };

    Handler handler = new Handler() {
    
        @Override
        public void handleMessage(Message msg) {
    
        }
    };

原网站

版权声明
本文为[Cheng @ @ Cheng]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207070655042690.html