Android在片段内检测ViewPager上的OnPageChangeListener

时间:2014-08-13 08:17:07

标签: android android-fragments android-viewpager

您好我有一个ViewPager,它使用片段适配器为每个页面创建一个片段。在每个片段上,我都有一个ImageView,我希望每当该页面出现在屏幕上时都会动画。

我的ViewPager当前预加载前2页,因此动画不会在那些页面上运行,但它在第3页上有效。我添加了一个onPageChangedListener,但不知道如何实现它,因此它与我的片段适配器对话并运行动画。有没有人知道如何从片段内正确检测页面更改或禁用页面预加载的方式 在内存管理方面有效吗?

继承人到目前为止我所尝试过的事情

继承我使用ViewPager的活动

public void getAdapter(){
         CustomViewPager pager = (CustomViewPager) findViewById(R.id.tutorialPager);
         pager.setPagingEnabled(true);
         pager.setOffscreenPageLimit(-1);
         adapterViewPager = new MyPagerAdapter(getSupportFragmentManager(),this);
         pager.setAdapter(adapterViewPager);
         CirclePageIndicator Indicator = (CirclePageIndicator)findViewById(R.id.circles);
         Indicator.setViewPager(pager);

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_tutorial_view);
        getAdapter();
        extras = getIntent().getExtras();
    }


        public static class MyPagerAdapter extends FragmentPagerAdapter {

            private Context context;

            public MyPagerAdapter(android.support.v4.app.FragmentManager fragmentManager,Context c) {

                super(fragmentManager);
                context = c;
            }


            @Override
            public int getCount() {
                int levelCount = 4;
                return levelCount;
            }

            // Returns the fragment to display for that page
            @Override
            public TutorialAdapter getItem(int position) {
                String data = null;

                return TutorialAdapter.newInstance(position, data, context);

            }


            @Override
            public CharSequence getPageTitle(int position) {
                return "Page " + position;
            }

        }

       public static class onPageChangedListener implements OnPageChangeListener {

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub

        }

       }

    }

继承我的onCreateView

中的片段适配器
if(page == 1){
                view = inflater.inflate(R.layout.layout_tutorial, container, false);


                tutImage = (ImageView)view.findViewById(R.id.tutImage);
                int imageResource = getResources().getIdentifier("tut_view_2", "drawable", context.getPackageName());
                Drawable tutImageDrawable = getResources().getDrawable(imageResource);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    tutImage.setBackground(tutImageDrawable);
                }else{
                    tutImage.setBackgroundDrawable(tutImageDrawable);
                }

                Animation AniMoveUp = AnimationUtils.loadAnimation(context, R.anim.tut_image);  
                tutImage.startAnimation(AniMoveUp);

2 个答案:

答案 0 :(得分:0)

这是一个示例Android应用程序,它使用两个新方法扩展Fragment生命周期:onResumeViewPage()和onPauseViewPage()。如果你把你的动画代码放在onResumeViewPage()它应该工作。

请参阅BitBucket中的Slider Android Application

答案 1 :(得分:-1)

将startAnimation调用移动到Fragments的onResume方法。这样,当Fragment可见时动画将开始。有关详细说明,请参阅Fragment LifeCycle