Java tutorial
/* * Copyright Txus Ballesteros 2016 (@txusballesteros) * * This file is part of some open source application. * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. * * Contact: Txus Ballesteros <txus.ballesteros@gmail.com> */ package com.redbooth.demo; import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.content.res.Resources; import android.os.Bundle; import android.support.v4.content.res.ResourcesCompat; import android.support.v7.app.AppCompatActivity; import android.view.View; import com.redbooth.WelcomeCoordinatorLayout; import com.redbooth.demo.animators.ChatAvatarsAnimator; import com.redbooth.demo.animators.InSyncAnimator; import com.redbooth.demo.animators.RocketAvatarsAnimator; import com.redbooth.demo.animators.RocketFlightAwayAnimator; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity { private boolean animationReady = false; private ValueAnimator backgroundAnimator; @Bind(R.id.coordinator) WelcomeCoordinatorLayout coordinatorLayout; private RocketAvatarsAnimator rocketAvatarsAnimator; private ChatAvatarsAnimator chatAvatarsAnimator; private RocketFlightAwayAnimator rocketFlightAwayAnimator; private InSyncAnimator inSyncAnimator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initializeListeners(); initializePages(); initializeBackgroundTransitions(); } private void initializePages() { final WelcomeCoordinatorLayout coordinatorLayout = (WelcomeCoordinatorLayout) findViewById( R.id.coordinator); coordinatorLayout.addPage(R.layout.welcome_page_1, R.layout.welcome_page_2, R.layout.welcome_page_3, R.layout.welcome_page_4); } private void initializeListeners() { coordinatorLayout.setOnPageScrollListener(new WelcomeCoordinatorLayout.OnPageScrollListener() { @Override public void onScrollPage(View v, float progress, float maximum) { if (!animationReady) { animationReady = true; backgroundAnimator.setDuration((long) maximum); } backgroundAnimator.setCurrentPlayTime((long) progress); } @Override public void onPageSelected(View v, int pageSelected) { switch (pageSelected) { case 0: if (rocketAvatarsAnimator == null) { rocketAvatarsAnimator = new RocketAvatarsAnimator(coordinatorLayout); rocketAvatarsAnimator.play(); } break; case 1: if (chatAvatarsAnimator == null) { chatAvatarsAnimator = new ChatAvatarsAnimator(coordinatorLayout); chatAvatarsAnimator.play(); } break; case 2: if (inSyncAnimator == null) { inSyncAnimator = new InSyncAnimator(coordinatorLayout); inSyncAnimator.play(); } break; case 3: if (rocketFlightAwayAnimator == null) { rocketFlightAwayAnimator = new RocketFlightAwayAnimator(coordinatorLayout); rocketFlightAwayAnimator.play(); } break; } } }); } private void initializeBackgroundTransitions() { final Resources resources = getResources(); final int colorPage1 = ResourcesCompat.getColor(resources, R.color.page1, getTheme()); final int colorPage2 = ResourcesCompat.getColor(resources, R.color.page2, getTheme()); final int colorPage3 = ResourcesCompat.getColor(resources, R.color.page3, getTheme()); final int colorPage4 = ResourcesCompat.getColor(resources, R.color.page4, getTheme()); backgroundAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), colorPage1, colorPage2, colorPage3, colorPage4); backgroundAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { coordinatorLayout.setBackgroundColor((int) animation.getAnimatedValue()); } }); } @OnClick(R.id.skip) void skip() { coordinatorLayout.setCurrentPage(coordinatorLayout.getNumOfPages() - 1, true); } }