Java tutorial
/* * Copyright [2017] [zhi] * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.zhi.android.modules.welcome; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.graphics.ColorUtils; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.jakewharton.rxbinding2.view.RxView; import com.zhi.android.common.app.ActivityScope; import com.zhi.android.common.app.BaseFragment; import com.zhi.android.common.view.DoubleViewAnimator; import com.zhi.android.libs.pager.PageIndicatorView; import java.util.concurrent.TimeUnit; import javax.inject.Inject; public class WelcomeFragment extends BaseFragment implements ViewPager.OnPageChangeListener { public static final String TAG = "WelcomeFragment"; public static final String ARGS_WELCOME_OPTION = "args-welcome-option"; @NonNull public static WelcomeFragment newInstance(@Nullable WelcomeOption option) { final WelcomeFragment welcomeFragment = new WelcomeFragment(); final Bundle args = new Bundle(); args.putParcelable(ARGS_WELCOME_OPTION, option); welcomeFragment.setArguments(args); return welcomeFragment; } private ViewPager mPager; private DoubleViewAnimator mAnimator; private WelcomeOption mOption; private WelcomePagerAdapter mAdapter; private WelcomeBackgroundView mBackgroundView; public WelcomeFragment() { // LEFT-DO-NOTHING } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mOption = getArguments().getParcelable(ARGS_WELCOME_OPTION); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.welcome_container, container, false); } @Override @SuppressWarnings("CheckReturnValue") public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); final View skipView = view.findViewById(R.id.welcome_skip); final View doneView = view.findViewById(R.id.welcome_done); RxView.clicks(skipView).throttleFirst(2000, TimeUnit.MILLISECONDS).subscribe(o -> { // Timber.d("Skip is clicked %s", o); }); RxView.clicks(doneView).throttleFirst(2000, TimeUnit.MILLISECONDS).subscribe(o -> { // Timber.d("Next is clicked %s", o); }); mAnimator = DoubleViewAnimator.newBuilder().animateFirstTime(false) .inAnimation(getContext(), android.R.anim.fade_in) .outAnimation(getContext(), android.R.anim.fade_out).firstView(skipView).secondView(doneView) .build(); mPager = view.findViewById(R.id.pager); mAdapter = new WelcomePagerAdapter(getContext(), getChildFragmentManager(), mOption); mPager.setAdapter(mAdapter); mPager.addOnPageChangeListener(this); mBackgroundView = view.findViewById(R.id.page_background); final PageIndicatorView pageIndicatorView = view.findViewById(R.id.page_indicator); pageIndicatorView.setPageIndicatorInterface(mAdapter); mPager.addOnPageChangeListener(pageIndicatorView); mAnimator.showFirstView(); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (positionOffset == 0f) { if (position == mAdapter.getCount() - 1) { getActivity().finish(); return; } } // retain background color final int color1 = mAdapter.getPageBackgroundColor(position); final int color2 = mAdapter.getPageBackgroundColor(position + 1); mBackgroundView.setBackgroundColor(ColorUtils.blendARGB(color1, color2, positionOffset)); if (position == mPager.getAdapter().getCount() - 2) { mPager.setAlpha(1f - positionOffset); } final View curWarmView = mPager.findViewWithTag(WelcomePageFragment.warmViewTag(position)); if (curWarmView != null) { WelcomePageFragment.onPageWarm(curWarmView, positionOffset); } final View nextWarmView = mPager.findViewWithTag(WelcomePageFragment.warmViewTag(position + 1)); if (nextWarmView != null) { WelcomePageFragment.onPageWarm(nextWarmView, positionOffset - 1.0f); } } @Override public void onPageSelected(int position) { if (position >= mAdapter.getPageIndicatedCount() - 1) { mAnimator.showSecondView(); } else { mAnimator.showFirstView(); } } @Override public void onPageScrollStateChanged(int state) { } }