গুগল আই / ও 2019 আপডেট
ভিউপ্যাজার 2 এখানে!
গুগল সবেমাত্র 'অ্যান্ড্রয়েডে নতুন কী' (আলাপ 'অ্যান্ড্রয়েড মূল বক্তব্য)' টকটিতে ঘোষণা করেছিল যে তারা রিসাইক্লারভিউয়ের উপর ভিত্তি করে একটি নতুন ভিউপ্যাজারে কাজ করছে!
স্লাইডগুলি থেকে:
ভিউপ্যাজারের মতো, তবে আরও ভাল
- ভিউপ্যাজার থেকে সহজ স্থানান্তর
- পুনর্ব্যবহারযোগ্য ভিউয়ের উপর ভিত্তি করে
- ডান থেকে বাম মোড সমর্থন
- উল্লম্ব পেজিংয়ের অনুমতি দেয়
- উন্নত ডেটাसेट পরিবর্তন বিজ্ঞপ্তি
আপনি এখানে সর্বশেষতম সংস্করণ এবং রিলিজ নোটগুলি এখানে পরীক্ষা করতে পারেন । এছাড়া একটি হল সরকারী নমুনা ।
ব্যক্তিগত মতামত: আমি মনে করি এটি সত্যিই প্রয়োজনীয় সংযোজন। আমি PagerSnapHelper অনির্দিষ্টকালের জন্য ডানদিকে বামনদীকরণের সাথে সম্প্রতি অনেক সমস্যায় পড়েছি - আমি টিকিটটি খুলেছি তা দেখুন।
নতুন উত্তর (২০১))
আপনি এখন স্ন্যাপহেল্পার ব্যবহার করতে পারেন ।
আপনি যদি একটি কেন্দ্র-প্রান্তিককৃত বিচ্ছিন্ন আচরণ অনুরূপ চান ViewPager তারপর ব্যবহার PagerSnapHelper :
SnapHelper snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
একটি লিনিয়ারস্নাপহেল্পারও রয়েছে । আমি এটি চেষ্টা করেছি এবং যদি আপনি শক্তির সাথে ঝাপটান হন তবে এটি 1 টি ঝাঁকুনির সাহায্যে 2 টি আইটেম স্ক্রল করে। ব্যক্তিগতভাবে আমি এটি পছন্দ করি নি, তবে কেবল নিজের দ্বারা সিদ্ধান্ত নিন - এটি চেষ্টা করতে কয়েক সেকেন্ড সময় লাগে।
আসল উত্তর (২০১))
বহু ঘন্টা চেষ্টা করার পরেও এখানে 3 টি বিভিন্ন সমাধান পাওয়া গেছে আমি অবশেষে একটি সমাধান তৈরি করেছি যা এ এর মধ্যে প্রাপ্ত আচরণের খুব কাছাকাছি নকল করে ViewPager।
সমাধানটি @EDizzle সমাধানের উপর ভিত্তি করে তৈরি করা হয়েছে , যা আমি বিশ্বাস করি যে আমি এটির মতো প্রায় কাজ করে বলার জন্য যথেষ্ট উন্নতি করেছি ViewPager।
গুরুত্বপূর্ণ: আমার RecyclerViewআইটেমগুলির প্রস্থটি স্ক্রিনের মতোই। আমি অন্য আকারের সাথে চেষ্টা করিনি। এছাড়াও আমি এটি একটি অনুভূমিক সহ ব্যবহার করি LinearLayoutManager। আমি মনে করি আপনি উল্লম্ব স্ক্রোল চাইলে আপনার কোডটি মানিয়ে নিতে হবে।
এখানে আপনার কোডটি রয়েছে:
public class SnappyRecyclerView extends RecyclerView {
public SnappyRecyclerView(Context context) {
super(context);
}
public SnappyRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public SnappyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean fling(int velocityX, int velocityY) {
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) getLayoutManager();
int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
View lastView = linearLayoutManager.findViewByPosition(lastVisibleItemPosition);
int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition();
View firstView = linearLayoutManager.findViewByPosition(firstVisibleItemPosition);
int leftMargin = (screenWidth - lastView.getWidth()) / 2;
int rightMargin = (screenWidth - firstView.getWidth()) / 2 + firstView.getWidth();
int leftEdge = lastView.getLeft();
int rightEdge = firstView.getRight();
int scrollDistanceLeft = leftEdge - leftMargin;
int scrollDistanceRight = rightMargin - rightEdge;
if (Math.abs(velocityX) < 1000) {
if (leftEdge > screenWidth / 2) {
smoothScrollBy(-scrollDistanceRight, 0);
} else if (rightEdge < screenWidth / 2) {
smoothScrollBy(scrollDistanceLeft, 0);
} else {
if (velocityX > 0) {
smoothScrollBy(-scrollDistanceRight, 0);
} else {
smoothScrollBy(scrollDistanceLeft, 0);
}
}
return true;
} else {
if (velocityX > 0) {
smoothScrollBy(scrollDistanceLeft, 0);
} else {
smoothScrollBy(-scrollDistanceRight, 0);
}
return true;
}
}
@Override
public void onScrollStateChanged(int state) {
super.onScrollStateChanged(state);
if (state == SCROLL_STATE_IDLE) {
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) getLayoutManager();
int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
View lastView = linearLayoutManager.findViewByPosition(lastVisibleItemPosition);
int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition();
View firstView = linearLayoutManager.findViewByPosition(firstVisibleItemPosition);
int leftMargin = (screenWidth - lastView.getWidth()) / 2;
int rightMargin = (screenWidth - firstView.getWidth()) / 2 + firstView.getWidth();
int leftEdge = lastView.getLeft();
int rightEdge = firstView.getRight();
int scrollDistanceLeft = leftEdge - leftMargin;
int scrollDistanceRight = rightMargin - rightEdge;
if (leftEdge > screenWidth / 2) {
smoothScrollBy(-scrollDistanceRight, 0);
} else if (rightEdge < screenWidth / 2) {
smoothScrollBy(scrollDistanceLeft, 0);
}
}
}
}
উপভোগ করুন!