/* * Copyright 2014 Qianqian Zhu <zhuqianqian.299@gmail.com> All rights reserved. * * 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.z299studio.pb; import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.content.Intent; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class TourActivity extends Activity implements AnimatorListener{ private static final int NUM_PAGES = 3; private int mCurrent; private ViewPager mPager; private LayerDrawable mBackground; private TextView mAppText; private ImageView[] mIndicators = new ImageView[NUM_PAGES]; private Button mSkip; private Button mNext; private boolean mReady; private int mFromActivity; private LinearLayout mContainer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(savedInstanceState!=null) { mCurrent = savedInstanceState.getInt(C.PAGE_NUM, 0); mReady = savedInstanceState.getBoolean("ready", false); mFromActivity = savedInstanceState.getInt(C.ACTIVITY); } else { mCurrent = 0; mReady = false; mFromActivity = getIntent().getExtras().getInt(C.ACTIVITY, C.Activity.SETTINGS); } setContentView(R.layout.activity_welcome); mPager = (ViewPager) findViewById(R.id.pager); int ids[] = {R.id.indicator_0, R.id.indicator_1, R.id.indicator_2}; mBackground= (LayerDrawable) mPager.getBackground(); mBackground.getDrawable(0).setAlpha(255); mBackground.getDrawable(1).setAlpha(0); mBackground.getDrawable(2).setAlpha(0); mBackground.getDrawable(3).setAlpha(0); for(int i = 0; i < NUM_PAGES; ++i) { mIndicators[i] = (ImageView)findViewById(ids[i]); } mSkip = (Button)findViewById(R.id.skip); mNext = (Button)findViewById(R.id.next); mContainer = (LinearLayout)findViewById(R.id.container); mAppText = (TextView)findViewById(R.id.app); if(!mReady) { mAppText.animate().alpha(1.0f).setDuration(400).setListener(this); } else { mPager.setAlpha(1.0f); mContainer.setAlpha(1.0f); } PagerAdapter pagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager()); mPager.setAdapter(pagerAdapter); mPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { adjustNavigation(position); invalidateOptionsMenu(); } }); mPager.setPageTransformer(true, new ViewPager.PageTransformer(){ @Override public void transformPage(View view, float position) { int index = (Integer) view.getTag(); Drawable currentDrawableInLayerDrawable; currentDrawableInLayerDrawable = mBackground.getDrawable(index); if(position <= -1 || position >= 1) { currentDrawableInLayerDrawable.setAlpha(0); } else if( position == 0 ) { currentDrawableInLayerDrawable.setAlpha(255); } else { currentDrawableInLayerDrawable.setAlpha((int)(255 - Math.abs(position*255))); } } }); if(mCurrent > 0) { mPager.setCurrentItem(mCurrent); } } private void adjustNavigation(int position) { for(int i = 0; i < NUM_PAGES; i++) { if(i==position) { mIndicators[i].setImageResource(R.drawable.dot_fill); } else { mIndicators[i].setImageResource(R.drawable.dot); } } if(position == (NUM_PAGES-1)) { mSkip.setVisibility(View.INVISIBLE); mNext.setText(R.string.done); } else if(position == NUM_PAGES) { finishTour(); } else { mSkip.setVisibility(View.VISIBLE); mNext.setText(R.string.next); } mCurrent = position; } public void onButtonClick(View view) { if(mReady) { if(view.getId() == R.id.skip) { finishTour(); } else { if(mCurrent < NUM_PAGES - 1) { mPager.setCurrentItem(mCurrent+1, true); } else { finishTour(); } } } } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt(C.PAGE_NUM, mCurrent); outState.putInt(C.ACTIVITY, mFromActivity); outState.putBoolean("ready", mReady); } private void finishTour() { Application.Options.mTour = true; Application.getInstance().mSP.edit().putBoolean(C.Keys.TOUR, true).commit(); if(mFromActivity == C.Activity.HOME){ Intent intent = new Intent(this, HomeActivity.class); this.startActivity(intent); } this.finish(); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } @Override public boolean onCreateOptionsMenu(Menu menu) { return false; } private class ScreenSlidePagerAdapter extends FragmentPagerAdapter { public ScreenSlidePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return ScreenSlidePageFragment.create(position); } @Override public int getCount() { return NUM_PAGES+1; } @Override public boolean isViewFromObject(View view, Object object) { if(object instanceof ScreenSlidePageFragment){ ScreenSlidePageFragment ssf = (ScreenSlidePageFragment)object; view.setTag(ssf.getPageNumber()); } return super.isViewFromObject(view, object); } } @Override public void onAnimationStart(Animator animation) {} @Override public void onAnimationEnd(Animator animation) { mAppText.animate().alpha(0.0f).setDuration(600); mPager.animate().alpha(1.0f).setStartDelay(200).setDuration(500); mContainer.animate().alpha(1.0f).setStartDelay(200).setDuration(500); mContainer.postDelayed(new Runnable() { @Override public void run() { mReady = true; } }, 500); } @Override public void onAnimationCancel(Animator animation) {} @Override public void onAnimationRepeat(Animator animation) {} }