Tôi cần phải viết một chuyển đổi tùy chỉnh cho ViewPager trên ứng dụng với android:minSdkVersion="9"
.Sự cố khi sử dụng ViewPager và PageTransformer với API Android <11
Tôi đang cố gắng chạy ZoomOutPageTransformer
được cung cấp here.
tôi nhận được không có lỗi biên dịch, và trên Samsung Galaxy S chạy Android 2.3.3 (API 10), dòng
pager.setPageTransformer(true, new ZoomOutPageTransformer());
không đưa ra bất cứ lỗi, nhưng các mã trong ZoomOutPageTransformer của transformPage
không bao giờ được thực thi .
Mã hoạt động hoàn hảo nếu tôi đặt android:minSdkVersion="11"
và sử dụng Nexus 4 (API 17).
Những Trình dịch chuyển trang này có thể được sử dụng với API 9 và 10 không? Nếu không, làm cách nào tôi có thể tạo chuyển tiếp tùy chỉnh cho ViewPager
?
EDIT
Dưới đây là đoạn code tôi sử dụng:
public class HomeFragment extends Fragment{
ViewPager mNewsTitlePager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.home_content, container, false);
}
@Override
public void onActivityCreated (Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mNewsTitlePager = (ViewPager) getView().findViewById(R.id.news_title_pager);
mNewsTitlePager.setPageTransformer(true, new ZoomOutPageTransformer());
mNewsTitlePager.setAdapter(new NewsPagerAdapter(news_item_list));
}
private class NewsPagerAdapter extends PagerAdapter {
private List<News> news_item_list;
private LayoutInflater inflater;
NewsPagerAdapter(List<News> news_item_list) {
this.news_item_list = news_item_list;
inflater = getActivity().getLayoutInflater();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public void finishUpdate(View container) {
}
@Override
public int getCount() {
return this.news_item_list.size();
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
TextView news_title = (TextView) inflater.inflate(R.layout.news_title_item, view, false);
news_title.setText(news_item_list.get(position).title);
((ViewPager) view).addView(news_title, 0);
return news_title;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View container) {
}
}
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private float MIN_SCALE = 0.85f;
private float MIN_ALPHA = 0.5f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 1) { // [-1,1]
// Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor)/2;
float horzMargin = pageWidth * (1 - scaleFactor)/2;
if (position < 0) {
view.setTranslationX(horzMargin - vertMargin/2);
} else {
view.setTranslationX(-horzMargin + vertMargin/2);
}
// Scale the page down (between MIN_SCALE and 1)
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
// Fade the page relative to its size.
view.setAlpha(MIN_ALPHA +
(scaleFactor - MIN_SCALE)/
(1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
}
đã tự hỏi nếu có bất kỳ phạm vi NineOldAndroids sáp nhập mà mang propertyAnimation xuống dưới 3.0, nhưng tôi nghi ngờ chúng ta có thể ghi đè lên pager xem và thêm mã cho hoạt hình sở hữu –
Tại sao dấu câu trả lời này được chấp nhận? Câu trả lời từ @hellcast thực sự hoạt động, [xem] (https://github.com/astinx/PageTransformerSupport) – 4gus71n
Bởi vì nó đã được 3 tháng trước và tôi đang làm việc trên một cái gì đó hoàn toàn khác nhau, vì vậy tôi đã không thử nghiệm nó. – jul