Programmer:)

[AndroidStudio] ViewPager2 (ImageSlide/ Banner) 본문

DEV/AndroidStudio

[AndroidStudio] ViewPager2 (ImageSlide/ Banner)

ryeggg 2020. 12. 30. 17:39
반응형

1. build.gradle(:app) -> ViewPager2를 사용하기 위한 종속성 추가.

 

2. activity_main.xml -> viewPager2 추가

 

3. value.xml 파일을 생성하여 drawable 경로 data 값 입력.

 

4. activity_main.xml 과 연결된 스크립트 

***TypedArray에 value.xml 의 bannerImages 데이터 값을 저장하여 사용 ***

 

5. ViewPager2 안에 넣을 ImageView.xml을 만들어줌.

 

6. 연결해줄 Adapter 스크립트 작성

 

package com.example.severtestjava01;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

class ViewPager2Adapter extends RecyclerView.Adapter<ViewPager2Adapter.MyViewHolder>
{
    private TypedArray mItems; //drawable 경로 데이터 저장 배열
    private Context context;

    public ViewPager2Adapter(Context context, TypedArray mItems)
    {
        this.context = context;
        this.mItems = mItems;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
    {
        View view = LayoutInflater.from(context).inflate(R.layout.activity_viewpager2_image, parent, false);
        return new MyViewHolder(view);
    }

//이미지 교체 함수
    @Override
    public void onBindViewHolder(@NonNull ViewPager2Adapter.MyViewHolder holder, int position)
    {
        int index = position % mItems.length();
        Log.d("MyAdapter", "onBindViewHolder index: " + index);
        if(index >= mItems.length())
        {
            index = 0;
        }
        holder.imageView.setImageResource(mItems.getResourceId(index, -1)); 
    }

    @Override
    public int getItemCount() {
        return Integer.MAX_VALUE; //이미지 슬라이드를 무한으로 할 수 있음
    }

    public class MyViewHolder extends RecyclerView.ViewHolder
    {
        ImageView imageView;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageView);
        }
    }

}
반응형
Comments