使用ViewPager和PageTransformer与Android API&LT发行; 11 [英] Issue using ViewPager and PageTransformer with Android API <11

查看:153
本文介绍了使用ViewPager和PageTransformer与Android API&LT发行; 11的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要写一个ViewPager上的应用程序与安卓定制的转变:的minSdkVersion =9

我试图运行 ZoomOutPageTransformer 给出的此处

我没有得到任何编译错误,并在三星Galaxy S运行Android 2.3.3(API 10),该行

  pager.setPageTransformer(真,新ZoomOutPageTransformer());
 

不给任何错误,但是code在ZoomOutPageTransformer的 transformPage 永远不会执行。

在code完美的作品,如果我设置机器人:的minSdkVersion =11,用我的Nexus 4(API 17)

难道这PageTransformers与API 9和10中使用?不然,我怎么可以创建自定义转换为 ViewPager

修改

这里的code我用:

 公共类HomeFragment扩展片段{

    ViewPager mNewsTitlePager;

    @覆盖
    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){

        返回inflater.inflate(R.layout.home_content,集装箱,假);
    }

    @覆盖
    公共无效onActivityCreated(包savedInstanceState){

        super.onActivityCreated(savedInstanceState);

        mNewsTitlePager =(ViewPager)getView()findViewById(R.id.news_title_pager)。
        mNewsTitlePager.setPageTransformer(真正的,新ZoomOutPageTransformer());

        mNewsTitlePager.setAdapter(新NewsPagerAdapter(news_item_list));


    }

    私有类NewsPagerAdapter扩展PagerAdapter {

        私人列表<新闻GT; news_item_list;
        私人LayoutInflater充气;

        NewsPagerAdapter(名单<新闻GT; news_item_list){
            this.news_item_list = news_item_list;
            充气= getActivity()getLayoutInflater()。
        }

        @覆盖
        公共无效destroyItem(ViewGroup中的容器,INT位置,Object对象){
            ((ViewPager)容器).removeView((查看)对象);
        }

        @覆盖
        公共无效finishUpdate(View容器){
        }

        @覆盖
        公众诠释getCount将(){
            返回this.news_item_list.size();
        }

        @覆盖
        公共对象instantiateItem(ViewGroup中认为,INT位置){
            TextView的news_title =(TextView中)inflater.inflate(R.layout.news_title_item,查看,FALSE);

            news_title.setText(news_item_list.get(位置).title伪);

            ((ViewPager)视图).addView(news_title,0);
            返回news_title;
        }

        @覆盖
        公共布尔isViewFromObject(查看视图,Object对象){
            返回view.equals(对象);
        }

        @覆盖
        公共无效restoreState(Parcelable状态,类加载器加载器){
        }

        @覆盖
        公共Parcelable saveState和(){
            返回null;
        }

        @覆盖
        公共无效startUpdate(View容器){
        }


    }

    公共类ZoomOutPageTransformer实现ViewPager.PageTransformer {
        私人浮动MIN_SCALE = 0.85f;
        私人浮动MIN_ALPHA = 0.5F;

        公共无效transformPage(查看视图,浮动位){
            INT页宽= view.getWidth();
            INT pageHeight = view.getHeight();

            如果(位置< -1){// [负无穷大,-1)
                //这是第路要走屏幕左侧。
                view.setAlpha(0);

            }否则如果(位置< = 1){// [-1,1]
                //修改默认的幻灯片过渡收缩的页面,以及
                浮动比例因子= Math.max(MIN_SCALE,1  -  Math.abs(位置));
                浮vertMargin = pageHeight *(1  - 比例因子)/ 2;
                浮horzMargin =页宽*(1  - 比例因子)/ 2;
                如果(位置℃,){
                    view.setTranslationX(horzMargin  -  vertMargin / 2);
                } 其他 {
                    view.setTranslationX(-horzMargin + vertMargin / 2);
                }

                //缩放页面向下(MIN_SCALE之间1)
                view.setScaleX(比例因子);
                view.setScaleY(比例因子);

                // Fade页面相对于它的大小。
                view.setAlpha(MIN_ALPHA +
                        (比例因子 -  MIN_SCALE)/
                        (1  -  MIN_SCALE)*(1  -  MIN_ALPHA));

            }其他{//(1 +无限远]
                //这是第路要走屏幕右侧。
                view.setAlpha(0);
            }
        }

    }


}
 

解决方案

好了:我得到的答案在的 DOC

 由于属性动画仅支持为安卓3.0和前进的,在早期版本的平台上设置一个ViewPager一个PageTransformer将被忽略。
 

我会使用 ViewFlipper 代替。

I need to write a custom transition for a ViewPager on an app with android:minSdkVersion="9".

I'm trying to run the ZoomOutPageTransformer given here.

I get no compiling error, and on a Samsung Galaxy S running Android 2.3.3 (API 10), the line

pager.setPageTransformer(true, new ZoomOutPageTransformer());

does not give any error, but the code in ZoomOutPageTransformer's transformPage is never executed.

The code works perfectly if I set android:minSdkVersion="11" and use my Nexus 4 (API 17).

Can these PageTransformers be used with API 9 and 10? Otherwise, how can I create custom transitions for ViewPager?

EDIT

Here's the code I use:

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);
            }
        }

    }


}

解决方案

Ok: I got the answer at the beginning of the doc:

As property animation is only supported as of Android 3.0 and forward, setting a PageTransformer on a ViewPager on earlier platform versions will be ignored.

I'll use ViewFlipper instead.

这篇关于使用ViewPager和PageTransformer与Android API&LT发行; 11的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆