RecyclerView는 ViewPager 페이지 넘기기 OnPageChangeListener 감청 기능을 구현합니다.
4774 단어 Android
우리는 ViewPager를 사용할 때 다소 구덩이에 부딪히기 때문에 오늘은 자세히 말하지 않겠다.
일단 저희가 SnapHelper에 대해서 소개를 해드릴게요.
Google은 안드로이드 24.2.0의 Support 패키지에 SnapHelper를 추가했습니다. SnapHelper는 RecyclerView를 확장하여 RecyclerView와 결합하여 사용하면 멋진 효과를 쉽게 낼 수 있습니다.SnapHelper의 기능은 무엇일까요?SnapHelper는 RecyclerView의 정렬 방식을 지원하기 위해 설계되었습니다. 즉, RecyclerView의 TargetView의 지정한 점이나 용기의 픽셀을 계산하여 정렬합니다.
다음은 SnapHelper의 두 가지 부류, Linear SnapHelper와 Pager SnapHelper를 소개합니다. 저희가 ViewPaper를 실현하려면 그 중 하나를 사용해야 합니다.
(1) LinearSnapHelper
LinearSnapHelper
는 현재 Item을 가운데로 표시하고 ViewPager 효과와 유사하지만 빠르게 미끄러질 수 있다(여러 페이지 미끄러짐).코드는 다음과 같다. LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
// SnapHelper attach RecyclrView
linearSnapHelper.attachToRecyclerView(recyclerView);
2) Pager SnapHelper(Android 25.1.0 support 패키지에 가입)
PagerSnapHelper
의 전시 효과는 LineSnapHelper
와 동일하며, Pager SnapHelper는 한 번에 한 페이지만 미끄러질 수 있도록 제한할 뿐 빠르게 미끄러질 수 없다.코드는 다음과 같습니다.PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
// SnapHelper attach RecyclrView
pagerSnapHelper.attachToRecyclerView(recyclerView);
이로써 우리는 자신의 수요에 따라 적합한 SnapHelper를 선택하여 ViewPager 페이지 넘기 효과를 실현할 수 있다.
다음으로 오늘의 주제 RecyclerView로 넘어가서 페이지 넘기기 수신 기능 추가
ViewPager 자체가 OnPageChangeListener를 실현시켰습니다. 저희는 추가하기만 하면 됩니다. 저희가 RecycleView를 사용하여 실현한 ViewPage 효과 자체는 OnPageChangeListener 이벤트가 실현되지 않았기 때문에 RecyclerView를 이용할 수 있습니다.OnScrollListener가 이 기능을 수행합니다.코드는 다음과 같습니다.
/**
* Created by pangli on 2018/12/13 9:43
* :RecyclerView ViewPager PageChangeListener
*/
public class RecyclerViewPageChangeListenerHelper extends RecyclerView.OnScrollListener {
private SnapHelper snapHelper;
private OnPageChangeListener onPageChangeListener;
private int oldPosition = -1;// Position
public RecyclerViewPageChangeListenerHelper(SnapHelper snapHelper, OnPageChangeListener onPageChangeListener) {
this.snapHelper = snapHelper;
this.onPageChangeListener = onPageChangeListener;
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (onPageChangeListener != null) {
onPageChangeListener.onScrolled(recyclerView, dx, dy);
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
int position = 0;
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
// itemView
View view = snapHelper.findSnapView(layoutManager);
if (view != null) {
// itemView position
position = layoutManager.getPosition(view);
}
if (onPageChangeListener != null) {
onPageChangeListener.onScrollStateChanged(recyclerView, newState);
//newState == RecyclerView.SCROLL_STATE_IDLE
if (newState == RecyclerView.SCROLL_STATE_IDLE && oldPosition != position) {
oldPosition = position;
onPageChangeListener.onPageSelected(position);
}
}
}
public interface OnPageChangeListener {
void onScrollStateChanged(RecyclerView recyclerView, int newState);
void onScrolled(RecyclerView recyclerView, int dx, int dy);
void onPageSelected(int position);
}
}
RecyclerView OnPageChangeListener 。
사용:
LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
linearSnapHelper.attachToRecyclerView(recyclerView);
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
recyclerView.smoothScrollToPosition(4);
}
}, 5000);
recyclerView.addOnScrollListener(new RecyclerViewPageChangeListenerHelper(linearSnapHelper,
new RecyclerViewPageChangeListenerHelper.OnPageChangeListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
}
@Override
public void onPageSelected(int position) {
ToastUtils.showToastShort(mContext, " " + position);
Log.e("Zorro", " " + position);
}
}));
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.