[英]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.