ViewPager
本文最后更新于276 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

1.应用场景

  • 引导界面,相册多图片预览
  • 多Tab页面,App导航
  • 广告播放展示

2.使用步骤

  1. 添加依赖
  2. xml布局中引用viewpager
  3. 声明数组,将图片存入
  4. 创建适配器,完成资源配置

3.案例

主布局:

<?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=".MainActivity">


   <androidx.viewpager2.widget.ViewPager2
       android:id="@+id/pagers"
       android:layout_width="match_parent"
       android:layout_height="100dp"
       android:orientation="horizontal"
       app:layout_constraintTop_toTopOf="parent">

   </androidx.viewpager2.widget.ViewPager2>


   <LinearLayout
       android:id="@+id/dots"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
      android:gravity="center_horizontal"
      app:layout_constraintTop_toTopOf="parent"
      android:layout_marginTop="160dp"
      android:orientation="horizontal">

      <ImageView
          android:layout_width="10dp"
          android:layout_height="10dp"
         android:background="@drawable/dot_selected"/>
      <ImageView
          android:layout_width="10dp"
          android:layout_height="10dp"
          android:background="@drawable/dot_unselected"/>
      <ImageView
          android:layout_width="10dp"
          android:layout_height="10dp"
          android:background="@drawable/dot_unselected"/>
      <ImageView
          android:layout_width="10dp"
          android:layout_height="10dp"
          android:background="@drawable/dot_unselected"/>
   </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

dot_selected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid
        android:color="#cccccc"/>
</shape>

dot_unselected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <solid
        android:color="#777777"/>

</shape>

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</LinearLayout>

Java代码:

package com.example.demo_4;

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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    List<Integer> pics = new ArrayList<>();
    LinearLayout dots;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pics.add(R.mipmap.img1);
        pics.add(R.mipmap.img2);
        pics.add(R.mipmap.img3);
        pics.add(R.mipmap.img4);

        //实例化适配器
        RecyclerView.Adapter adapter = new RecyclerView.Adapter() {
            @NonNull
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                //此时用的布局是ViewPager每一页用来播放图片的布局
                //该布局不设置任何空间,因为待会我们会直接将图片作为根布局的背景

                View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,parent,false);
                return new ViewHolder(v);
            }

            //绑定 ViewHolder里面控件设置显示内容
            @Override
            public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
                ViewHolder h = (ViewHolder) holder;
                h.container.setBackgroundResource(pics.get(position));
            }

            @Override
            public int getItemCount() {
                return pics.size();
            }
        };
        //找到ViewPager,设置适配器

        ViewPager2 pagers = findViewById(R.id.pagers);
        pagers.setAdapter(adapter);

        dots = findViewById(R.id.dots);

        pagers.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                for (int i=0;i<dots.getChildCount();i++){
                    //通过循环将现有所有的点设为未选中的状态
                    ((ImageView)dots.getChildAt(i)).setBackgroundResource(R.drawable.dot_unselected);
                }
                //设置当前位置对应的点未选中的状态
                ((ImageView)dots.getChildAt(position)).setBackgroundResource(R.drawable.dot_selected);
            }
        });
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        public LinearLayout container;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            container = itemView.findViewById(R.id.container);

        }
    }
}

同时,需要添加依赖:

    implementation 'androidx.viewpager2:viewpager2:1.0.0'
如果觉得本文对您有所帮助,可以支持下博主,一分也是缘
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇