গুগল আই / ও 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);
}
}
}
}
উপভোগ করুন!