package com.linfaxin.transitionplayer.demo;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.transitions.everywhere.Fade;
import android.transitions.everywhere.Scene;
import android.transitions.everywhere.TransitionManager;
import android.transitions.everywhere.TransitionSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Interpolator;
import android.widget.ImageView;
import android.widget.Scroller;
import com.linfaxin.transitionplayer.TransitionPlayer;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
/**
* Created by linfaxin on 2015/8/14.
* Email: linlinfaxin@163.com
*/
public class XiaoMaIntroDemo extends Activity implements ViewPager.OnPageChangeListener {
private ViewPager extraPager;
private Scene pageScene1_2;
private Scene pageScene2_3;
private Scene pageScene3_4;
TransitionPlayer customTransition1_2 = new TransitionPlayer();
TransitionPlayer customTransition2_3 = new TransitionPlayer();
TransitionPlayer customTransition3_4 = new TransitionPlayer();
private Scene textScene1;
private Scene textScene2;
private Scene textScene3;
private Scene textScene4;
private ViewGroup mTextSceneRoot;
private View mStartBtn;
private View mPathBtn;
private AlphaAnimation mShowAnimation;
private AlphaAnimation mHideAnimation;
private AlphaAnimation mTextHideAnimation;
private int[] resIdArray3 = new int[] {
R.id.low_price_item, R.id.real_source_item,
R.id.keep_privacy_item, R.id.has_deposit_item,
R.id.is_profession_item, R.id.best_server_item
};
private int[] resIdArray4 = new int[] {
R.id.fast_ask_item, R.id.fase_price_item,
R.id.fast_sign_item, R.id.fast_take_item
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo_xiaoma_intro);
extraPager = (ViewPager) findViewById(R.id.extra_pager);
initSmoothScrollToViewPager(extraPager);
mStartBtn = findViewById(R.id.start);
View.OnClickListener finishClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
};
mStartBtn.setOnClickListener(finishClick);
mStartBtn.setVisibility(View.INVISIBLE);
mPathBtn = findViewById(R.id.through);
mPathBtn.setOnClickListener(finishClick);
mShowAnimation = new AlphaAnimation(0.0f, 1.0f);
mHideAnimation = new AlphaAnimation(1.0f, 0.0f);
mTextHideAnimation = new AlphaAnimation(1.0f, 0.0f);
mShowAnimation.setDuration(400);
mHideAnimation.setDuration(400);
mTextHideAnimation.setDuration(400);
mShowAnimation.setFillAfter(true);
mHideAnimation.setFillAfter(true);
mTextHideAnimation.setFillAfter(true);
final List<View> viewArray = new ArrayList<View>();
View view1 = View.inflate(this, R.layout.xiaoma_intro_page_base, null);
((ImageView) view1.findViewById(R.id.title)).setImageResource(R.drawable.xiaoma_intro_top_text1);
view1.findViewById(R.id.description).setVisibility(View.VISIBLE);
viewArray.add(view1);
View view2 = View.inflate(this, R.layout.xiaoma_intro_page_base, null);
((ImageView) view2.findViewById(R.id.title)).setImageResource(R.drawable.xiaoma_intro_top_text2);
view2.findViewById(R.id.description).setVisibility(View.GONE);
viewArray.add(view2);
View view3 = View.inflate(this, R.layout.xiaoma_intro_page_base, null);
((ImageView) view3.findViewById(R.id.title)).setImageResource(R.drawable.xiaoma_intro_top_text3);
view3.findViewById(R.id.description).setVisibility(View.GONE);
viewArray.add(view3);
View view4 = View.inflate(this, R.layout.xiaoma_intro_page_base, null);
((ImageView) view4.findViewById(R.id.title)).setImageResource(R.drawable.xiaoma_intro_top_text4);
view4.findViewById(R.id.description).setVisibility(View.GONE);
viewArray.add(view4);
pageScene1_2 = Scene.getSceneForLayout((ViewGroup)findViewById(R.id.root_view_1_to_2), R.layout.xiaoma_intro_scene2, this);
pageScene2_3 = Scene.getSceneForLayout((ViewGroup)findViewById(R.id.root_view_2_to_3), R.layout.xiaoma_intro_scene3, this);
pageScene3_4 = Scene.getSceneForLayout((ViewGroup)findViewById(R.id.root_view_3_to_4), R.layout.xiaoma_intro_scene4, this);
extraPager.postDelayed(new Runnable() {
@Override
public void run() {
TransitionManager.go(pageScene1_2, customTransition1_2);
TransitionManager.go(pageScene2_3, customTransition2_3);
TransitionManager.go(pageScene3_4, customTransition3_4);
}
}, 50);
mTextSceneRoot = (ViewGroup) findViewById(R.id.text_root_view);
textScene1 = Scene.getSceneForLayout(mTextSceneRoot, R.layout.xiaoma_intro_scene1_text, this);
textScene2 = Scene.getSceneForLayout(mTextSceneRoot, R.layout.xiaoma_intro_scene2_text, this);
textScene3 = Scene.getSceneForLayout(mTextSceneRoot, R.layout.xiaoma_intro_scene3_text, this);
textScene4 = Scene.getSceneForLayout(mTextSceneRoot, R.layout.xiaoma_intro_scene4_text, this);
extraPager.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return 4;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewArray.get(position));
return viewArray.get(position);
}
});
extraPager.addOnPageChangeListener(this);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(positionOffset==0 && position>0){//避免一页结束时,细微的闪移
return;
}
switch (position){
case -1:
case 0:
pageScene1_2.getSceneRoot().setVisibility(View.VISIBLE);
pageScene2_3.getSceneRoot().setVisibility(View.INVISIBLE);
pageScene3_4.getSceneRoot().setVisibility(View.INVISIBLE);
customTransition1_2.setCurrentFraction(positionOffset);
break;
case 1:
pageScene2_3.getSceneRoot().setVisibility(View.VISIBLE);
pageScene1_2.getSceneRoot().setVisibility(View.INVISIBLE);
pageScene3_4.getSceneRoot().setVisibility(View.INVISIBLE);
customTransition2_3.setCurrentFraction(positionOffset);
break;
case 2:
pageScene3_4.getSceneRoot().setVisibility(View.VISIBLE);
pageScene1_2.getSceneRoot().setVisibility(View.INVISIBLE);
pageScene2_3.getSceneRoot().setVisibility(View.INVISIBLE);
customTransition3_4.setCurrentFraction(positionOffset);
break;
case 3:
pageScene3_4.getSceneRoot().setVisibility(View.VISIBLE);
pageScene1_2.getSceneRoot().setVisibility(View.INVISIBLE);
pageScene2_3.getSceneRoot().setVisibility(View.INVISIBLE);
customTransition3_4.setCurrentFraction(1);
break;
}
}
private int lastPosition = 0;
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
TransitionManager.go(textScene1);
break;
case 1:
TransitionManager.go(textScene2);
break;
case 2:
if (lastPosition != 3) {
TransitionSet set = new TransitionSet();
for (int i = 0; i < resIdArray3.length ;i++) {
Fade fade = new Fade(Fade.MODE_IN);
fade.addTarget(resIdArray3[i]);
set.addTransition(fade);
}
set.setOrdering(TransitionSet.ORDERING_SEQUENTIAL);
set.setDuration(400);
set.setStartDelay(400);
TransitionManager.go(textScene3, set);
} else {
mStartBtn.startAnimation(mHideAnimation);
mShowAnimation.setDuration(400);
mPathBtn.startAnimation(mShowAnimation);
TransitionManager.go(textScene3);
mStartBtn.setClickable(false);
}
break;
case 3:
TransitionSet set4 = new TransitionSet();
for (int i = 0; i < resIdArray4.length ;i++) {
Fade fade = new Fade(Fade.MODE_IN);
fade.addTarget(resIdArray4[i]);
set4.addTransition(fade);
}
set4.setOrdering(TransitionSet.ORDERING_SEQUENTIAL);
set4.setDuration(400);
set4.setStartDelay(400);
TransitionManager.go(textScene4, set4);
mPathBtn.startAnimation(mHideAnimation);
mShowAnimation.setDuration(1000);
mStartBtn.startAnimation(mShowAnimation);
mStartBtn.setClickable(true);
break;
default:
break;
}
lastPosition = position;
}
@Override
public void onPageScrollStateChanged(int state) {
if(state==ViewPager.SCROLL_STATE_DRAGGING){
mTextSceneRoot.startAnimation(mTextHideAnimation);
}else{
mTextSceneRoot.clearAnimation();
}
}
private void initSmoothScrollToViewPager(ViewPager viewPager){
try {
Interpolator sInterpolator = new Interpolator() {
public float getInterpolation(float t) {
t -= 1.0f;
return t * t * t * t * t + 1.0f;
}
};
Field field = ViewPager.class.getDeclaredField("mScroller");
field.setAccessible(true);
field.set(viewPager, new Scroller(this, sInterpolator){
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, duration * 2);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}