blob: 689e6d7026dde90f250aae86548e9080017731dd [file] [log] [blame]
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.
}
}
}