상세 컨텐츠

본문 제목

[안드로이드] RecyclerView Animation 스크롤(Scroll) 에 애니메이션 효과주는 방법

안드로이드

by aries574 2022. 1. 2. 13:59

본문


이전 시간에 조회 시 RecyclerView에 아이템(Item)들이

위에서 쏟아지듯 나타나는  애니메이션 효과 주는 방법에

대해 알아 보았습니다.

이번 시간에는 이어서 스크롤(Scroll)을 내릴 때에도

애니메이션 효과를 주어서 옆으로 하나씩 추가되며

보이는 방법을 알아보겠습니다. 

이전 시간에 이어서 하기 때문에 이전 게시물을

보지 않으신 분들은 이전 게시물을 먼저

보시면 됩니다. 

 

2022.01.01 - [안드로이드] - [안드로이드] RecyclerView item animation 서서히 나타나는 효과 주는 방법

 

[안드로이드] RecyclerView item animation 서서히 나타나는 효과 주는 방법

이번 시간에는 리스트로 데이터를 보여줄 때 사용하는 RecyclerView에 애니메이션(Animation)을 적용시켜 서서히 리스트가 보여지는 방법을 알아보겠습니다. 목차 1. Item 클래스 만들기 Item.java 2. It

aries574.tistory.com


목차

1. 실행화면

2. 애니메이션 파일 추가

3. ItemAdapter 기능 구현(ItemAdapter.java)


1. 실행화면

 

2. 애니메이션 파일 추가

slide_in_row.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="100%"
        android:toXDelta="0%"/>
</set>

2022.01.01 - [안드로이드] - [안드로이드 스튜디오] 애니메이션(Animation) 폴더 및 파일 생성하는 방법

 

[안드로이드 스튜디오] 애니메이션(Animation) 폴더 및 파일 생성하는 방법

이번 시간에는 안드로이드 스튜디오에서 애니메이션(Animation) 폴더 생성 및 파일 생성하는 방법을 알아보겠습니다. 프로젝트를 생성하면 기본으로 res 폴더에는 drawable, layout, minimap, values 폴더가

aries574.tistory.com

 

 

3. ItemAdapter 기능 구현(ItemAdapter.java)

기존 소스에서 추가된 부분은

3-1. 변수 추가

int lastPosition = -1;
Context context;
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {

    LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
    View itemView = inflater.inflate(R.layout.item_layout, viewGroup, false);

    context = viewGroup.getContext();

    return new ViewHolder(itemView);
}

 

3-2. 애니메이션 적용

onBindViewHolder 메서드에

   @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {

        if(viewHolder.getAdapterPosition() > lastPosition){

            //애니메이션 적용
            Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_in_row);
            ((ViewHolder) viewHolder).itemView.startAnimation(animation);

            Item item = items.get(position);
            viewHolder.setItem(item);
        }

    }

3-3. 전체 소스

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder>{

    ArrayList<Item> items = new ArrayList<Item>();

    int lastPosition = -1;

    Context context;

    static String TAG = "Adapter";

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
        View itemView = inflater.inflate(R.layout.item_layout, viewGroup, false);

        context = viewGroup.getContext();

        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {

        if(viewHolder.getAdapterPosition() > lastPosition){

            //애니메이션 적용
            Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_in_row);
            ((ViewHolder) viewHolder).itemView.startAnimation(animation);

            Item item = items.get(position);
            viewHolder.setItem(item);
        }

    }

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

    public void addItem(Item item){
        items.add(item);
    }

    public void removeAllItem(){
        items.clear();
    }

    static class ViewHolder extends RecyclerView.ViewHolder{

        TextView title_view;
        TextView description;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            title_view = itemView.findViewById(R.id.title_text);
            description = itemView.findViewById(R.id.desc_text);
        }

        public void setItem(Item item){

            title_view.setText(item.getTitle());
            description.setText(item.getDescription());
        }
    }
}
반응형

관련글 더보기

댓글 영역