| package com.airbnb.lottie.samples; |
| |
| import android.os.Bundle; |
| import android.support.annotation.Nullable; |
| import android.support.v4.app.Fragment; |
| import android.support.v4.view.PagerAdapter; |
| import android.support.v4.view.ViewPager; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.view.ViewTreeObserver; |
| import android.view.animation.Interpolator; |
| import android.widget.Scroller; |
| |
| import com.airbnb.lottie.LottieAnimationView; |
| |
| import java.lang.reflect.Field; |
| |
| import butterknife.BindView; |
| |
| public class AppIntroFragment extends Fragment { |
| private static int PAGES = 3; |
| |
| static AppIntroFragment newInstance() { |
| return new AppIntroFragment(); |
| } |
| |
| @BindView(R.id.animation_view) LottieAnimationView animationView; |
| @BindView(R.id.view_pager) ViewPager viewPager; |
| |
| @Nullable |
| @Override |
| public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { |
| View view = inflater.inflate(R.layout.fragment_app_intro, container, false); |
| |
| setViewPagerScroller(); |
| viewPager.setAdapter(new PagerAdapter() { |
| @Override |
| public int getCount() { |
| return PAGES + 1; |
| } |
| |
| @Override |
| public boolean isViewFromObject(View view, Object object) { |
| return object == view; |
| } |
| |
| @Override |
| public Object instantiateItem(ViewGroup container, int position) { |
| View view = LayoutInflater.from(container.getContext()).inflate(R.layout.pager_item_app_intro, container, false); |
| container.addView(view); |
| return view; |
| } |
| |
| @Override |
| public void destroyItem(ViewGroup container, int position, Object object) { |
| container.removeView((View) object); |
| } |
| }); |
| |
| viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { |
| @Override |
| public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { |
| animationView.setProgress(position / (float) PAGES + positionOffset / (float) PAGES); |
| } |
| }); |
| |
| viewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { |
| @Override |
| public void onGlobalLayout() { |
| viewPager.getViewTreeObserver().removeOnGlobalLayoutListener(this); |
| viewPager.setCurrentItem(1, true); |
| } |
| }); |
| |
| return view; |
| } |
| |
| private void setViewPagerScroller() { |
| //noinspection TryWithIdenticalCatches |
| try { |
| Field scrollerField = ViewPager.class.getDeclaredField("mScroller"); |
| scrollerField.setAccessible(true); |
| Field interpolator = ViewPager.class.getDeclaredField("sInterpolator"); |
| interpolator.setAccessible(true); |
| |
| Scroller scroller = new Scroller(getContext(), (Interpolator) interpolator.get(null)) { |
| @Override |
| public void startScroll(int startX, int startY, int dx, int dy, int duration) { |
| super.startScroll(startX, startY, dx, dy, duration * 15); |
| } |
| }; |
| scrollerField.set(viewPager, scroller); |
| } catch (NoSuchFieldException e) { |
| // Do nothing. |
| } catch (IllegalAccessException e) { |
| // Do nothing. |
| } |
| } |
| } |