package com.androidexperiments.landmarker.widget; import android.content.Context; import android.os.Handler; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.DecelerateInterpolator; import android.widget.RelativeLayout; import android.widget.TextView; import com.google.creativelabs.androidexperiments.typecompass.R; import com.androidexperiments.landmarker.util.SimpleAnimationListener; import butterknife.ButterKnife; import butterknife.InjectView; /** * Intro view for app startup */ public class IntroView extends RelativeLayout { private static final String TAG = IntroView.class.getSimpleName(); @InjectView(R.id.intro_compass) View mCompass; @InjectView(R.id.intro_compass_spin) View mCompassSpinner; @InjectView(R.id.intro_load_text) TextView mSubTextView; private Animation mSpinnerAnim; private Handler mSpinnerHandler; private boolean mIsDone = false; public IntroView(Context context) { super(context); } public IntroView(Context context, AttributeSet attrs) { super(context, attrs); } public IntroView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onFinishInflate() { ButterKnife.inject(this, this); mSpinnerAnim = AnimationUtils.loadAnimation(getContext(), R.anim.intro_compass_spinner); mSpinnerHandler = new Handler(); mSubTextView.setVisibility(INVISIBLE); mCompass.setVisibility(INVISIBLE); super.onFinishInflate(); } public void animateIn(final Runnable completeRunner) { Animation scale = AnimationUtils.loadAnimation(this.getContext(), R.anim.intro_compass_in); scale.setInterpolator(new DecelerateInterpolator(1.5f)); mCompass.startAnimation(scale); mCompass.setVisibility(VISIBLE); //subtext Animation fromBottom = AnimationUtils.loadAnimation(getContext(), R.anim.show_from_bottom); fromBottom.setInterpolator(new DecelerateInterpolator(2.f)); fromBottom.setStartOffset(750); fromBottom.setAnimationListener(new SimpleAnimationListener() { @Override public void onAnimationStart(Animation animation) { mSubTextView.setVisibility(VISIBLE); } @Override public void onAnimationEnd(Animation animation) { startSpinner(); completeRunner.run(); } }); mSubTextView.startAnimation(fromBottom); } private void startSpinner() { mSpinnerHandler.post(new Runnable() { @Override public void run() { if(mIsDone) return; mCompassSpinner.startAnimation(mSpinnerAnim); mSpinnerHandler.postDelayed(this, 1500); } }); } public void animateOut() { Animation hide = AnimationUtils.loadAnimation(getContext(), R.anim.hide_intro_view); mIsDone = true; this.startAnimation(hide); this.setVisibility(GONE); } public void setIsFindingPlaces() { mSubTextView.setText(R.string.intro_finding_places); } }