访问片段查看

时间:2015-01-02 09:34:28

标签: android android-fragments android-viewpager

我正在尝试在屏幕上显示片段时启动动画(我正在使用ViewPager)。

这是我的代码的一部分

public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

        private Map<Integer, String> mFragmentTags;
        private FragmentManager mFragmentManager;

        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
            mFragmentManager = fm;
            mFragmentTags = new HashMap<Integer, String>();
        }

        public ScreenSlidePageFragment getFragment(int position) {
            String tag = mFragmentTags.get(position);
            if (tag == null)
                return null;
            return (ScreenSlidePageFragment) mFragmentManager.findFragmentByTag(tag);
        }

        @Override
        public Fragment getItem(int position) {
            return ScreenSlidePageFragment.create(position);
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }



        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Object obj = super.instantiateItem(container, position);
            if (obj instanceof Fragment) {
                // record the fragment tag here.
                Fragment f = (Fragment) obj;
                String tag = f.getTag();
                mFragmentTags.put(position, tag);
                System.out.println("holi");
            }
            return obj;
        }

    }

    public class ScreenSlideActivity extends FragmentActivity {
    (...)
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_screen_slide);

            // Instantiate a ViewPager and a PagerAdapter.
            mPager = (ViewPager) findViewById(R.id.pager);
            mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());

    (...)

    SimpleOnPageChangeListener mPageChangelistener = new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    // When changing pages, reset the action bar actions since they are dependent
                    // on which page is currently active. An alternative approach is to have each
                    // fragment expose actions itself (rather than the activity exposing actions),
                    // but for simplicity, the activity provides the actions in this sample.  
                    ScreenSlidePageFragment currentFgm = mPagerAdapter.getFragment(position);
                    Animation animacion = AnimationUtils.loadAnimation(ScreenSlideActivity.this, R.anim.glasses);
                    currentFgm.getView().findViewById(R.id.image).startAnimation(animacion);
                    invalidateOptionsMenu();
                }
(...)

问题是调用onPageSelected时在

中返回NullPointer异常
currentFgm.getView().findViewById(R.id.image).startAnimation(animacion);

如何在屏幕上显示片段时启动动画?

1 个答案:

答案 0 :(得分:0)

如果您尝试向ViewPager添加动画,则可以实现ViewPager.PageTransformer界面并将其提供给视图寻呼机,以显示与默认屏幕幻灯片动画不同的动画。

ViewPager mPager = (ViewPager) findViewById(R.id.pager);
...
mPager.setPageTransformer(true, new CustomTransformer());

你会发现here两个PagerTransformers的例子。