[英]Android detecting OnPageChangeListener on a ViewPager from within a fragment
嗨,我有一个ViewPager,它已使用片段适配器为每个页面创建一个片段。 在每个片段上,我都有一个ImageView,每次该页面出现在屏幕上时都希望对其进行动画处理。
我的ViewPager当前会预加载第1页和第2页,因此动画不会在第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);
这是一个示例Android应用程序,它使用两种新方法扩展了片段生命周期:onResumeViewPage()和onPauseViewPage()。 如果将动画代码放在onResumeViewPage()中,它将可以正常工作。
请参阅:BitBucket中的Slider Android应用程序 。
将您的startAnimation调用移至Fragments的onResume方法。 这样,当“片段”可见时,动画将开始。 有关更多详细说明,请参见Fragment LifeCycle 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.