| 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.ViewPager; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.view.animation.Interpolator; |
| import android.widget.Scroller; |
| |
| import com.airbnb.lottie.LottieAnimationView; |
| import com.matthewtamlin.sliding_intro_screen_library.buttons.IntroButton; |
| import com.matthewtamlin.sliding_intro_screen_library.core.IntroActivity; |
| import com.matthewtamlin.sliding_intro_screen_library.core.LockableViewPager; |
| |
| import java.lang.reflect.Field; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| |
| public class AppIntroActivity extends IntroActivity { |
| private static final float[] ANIMATION_TIMES = new float[]{ |
| 0f, |
| 0.3333f, |
| 0.6666f, |
| 1f, |
| 1f |
| |
| }; |
| private LottieAnimationView animationView; |
| private LockableViewPager viewPager; |
| |
| @Override |
| protected Collection<? extends Fragment> generatePages(Bundle savedInstanceState) { |
| return new ArrayList<EmptyFragment>() {{ |
| add(EmptyFragment.newInstance()); |
| add(EmptyFragment.newInstance()); |
| add(EmptyFragment.newInstance()); |
| add(EmptyFragment.newInstance()); |
| }}; |
| } |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| animationView = (LottieAnimationView) LayoutInflater.from(this).inflate(R.layout.app_intro_animation_view, getRootView(), false); |
| viewPager = (LockableViewPager) findViewById(com.matthewtamlin.sliding_intro_screen_library.R.id.intro_activity_viewPager); |
| getRootView().addView(animationView, 0); |
| setViewPagerScroller(); |
| |
| addPageChangeListener(new ViewPager.OnPageChangeListener() { |
| @Override |
| public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { |
| setAnimationProgress(position, positionOffset); |
| } |
| |
| @Override |
| public void onPageSelected(int position) { |
| } |
| |
| @Override |
| public void onPageScrollStateChanged(int state) { |
| } |
| }); |
| } |
| |
| @Override |
| protected IntroButton.Behaviour generateFinalButtonBehaviour() { |
| return new IntroButton.Behaviour() { |
| @Override |
| public void setActivity(IntroActivity activity) { |
| finish(); |
| } |
| |
| @Override |
| public IntroActivity getActivity() { |
| return null; |
| } |
| |
| @Override |
| public void run() { |
| } |
| }; |
| } |
| |
| private void setAnimationProgress(int position, float positionOffset) { |
| float startProgress = ANIMATION_TIMES[position]; |
| float endProgress = ANIMATION_TIMES[position + 1]; |
| |
| animationView.setProgress(lerp(startProgress, endProgress, positionOffset)); |
| } |
| |
| private float lerp(float startValue, float endValue, float f) { |
| return startValue + f * (endValue - startValue); |
| } |
| |
| public static final class EmptyFragment extends Fragment { |
| |
| private static EmptyFragment newInstance() { |
| return new EmptyFragment(); |
| } |
| |
| @Nullable |
| @Override |
| public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { |
| return inflater.inflate(R.layout.fragment_empty, container, false); |
| } |
| } |
| |
| 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(this, (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 * 7); |
| } |
| }; |
| scrollerField.set(viewPager, scroller); |
| } catch (NoSuchFieldException e) { |
| // Do nothing. |
| } catch (IllegalAccessException e) { |
| // Do nothing. |
| } |
| } |
| } |