package com.cui.trypro.activitys; import android.annotation.SuppressLint; import android.app.ActivityOptions; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Build; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.transition.Explode; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.cui.trypro.BaseActivity; import com.cui.trypro.R; import com.cui.trypro.activity_animation.AndroidL_NewApi; import com.cui.trypro.activity_animation.GifActivity; import com.cui.trypro.activity_animation.MyOptionICS; import com.cui.trypro.activity_animation.ZhiHuActivity; import com.cui.trypro.activity_animation.activityOptionCS.ActivityCompatICS; import com.cui.trypro.activity_animation.activityOptionCS.ActivityOptionsCompatICS; import com.cui.trypro.activity_animation.activityOptionCS.transition.TransitionCompat; import com.cui.trypro.adapter.Animation_groups_adapter; import com.cui.trypro.adapter.MyBaseAdapter; import com.cui.trypro.utils.RecyclerUtils; import com.cui.trypro.utils.RecyclerUtils.RecyclerItemClickListener; import com.cui.trypro.utils.RecyclerUtils.RecyclerItemClickListener.OnItemClickListener; import com.cui.trypro.utils.Utils; import java.util.ArrayList; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; /** * activity转场动画示例 */ public class Activity_Animation_Act extends BaseActivity implements View.OnClickListener, OnItemClickListener { @InjectView(R.id.simple_list) RecyclerView simpleList; @InjectView(R.id.btn_turn) Button btnTurn; @InjectView(R.id.img_te) ImageView imgTe; @InjectView(R.id.img_bujian) ImageView imgBujian; private Context mContext; private List<String> list = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simplea_act); ButterKnife.inject(this); super.initToolbar("", true); mContext = this; simpleList.setLayoutManager(new LinearLayoutManager(mContext)); simpleList.setAdapter(new Animation_groups_adapter(initData())); simpleList.addOnItemTouchListener(new RecyclerUtils.RecyclerItemClickListener(mContext, this)); btnTurn.setText("optionICS点控件的缩放"); btnTurn.setOnClickListener(this); imgTe.setOnClickListener(this); imgBujian.setOnClickListener(this); } private List<String> initData() { list.add("知乎欢迎动画"); list.add("gif显示"); list.add("android_L_Animation"); list.add("optionICS从下到上的"); return list; } /** * source:一个view对象,用户确定新activity启动的初始坐标 * <p/> * startX:新activity出现的初始X坐标,这个坐标是相对于source的左上角X坐标 * <p/> * startY:新activity出现的初始Y坐标,这个坐标相对于source的左上角Y坐标 * <p/> * width:新activity初始的宽度 * <p/> * height:新activity初始的高度 */ public void scaleUpAnim(View view) { ActivityOptionsCompatICS options = ActivityOptionsCompatICS.makeScaleUpAnimation(view, 30, 30, //拉伸开始的坐标 view.getMeasuredWidth(), view.getMeasuredHeight());//初始的宽高 ActivityCompatICS.startActivity(this, new Intent(mContext, MyOptionICS.class), options.toBundle()); } /** * source:一个view对象,用来确定起始坐标 * <p/> * thumbnail:一个bitmap对象,新的activity将通过这个bitmap渐变拉伸出现,新的activity初始大小就是这个bitmap的大小 * <p/> * startX:新activity初始的X坐标,相对于source左上角的X来说的 * <p/> * startY:新的activity初始的Y坐标,相对于source左上角Y坐标来说的 * <p/> * 效果是:一个bitmap慢慢从某个位置拉伸渐变新的activity */ public void thumbNailScaleAnim(ImageView view) { view.setDrawingCacheEnabled(true); Bitmap bitmap = view.getDrawingCache(); ActivityOptionsCompatICS options = ActivityOptionsCompatICS.makeThumbnailScaleUpAnimation( view, bitmap, 0, 0); // Request the activity be started, using the custom animation options. ActivityCompatICS.startActivity(this, new Intent(mContext, MyOptionICS.class), options.toBundle()); // view.setDrawingCacheEnabled(false); } /** * //自定义动画效果使用anim */ public void customAnim() { ActivityOptionsCompatICS options = ActivityOptionsCompatICS.makeCustomAnimation(this, R.anim.slide_bottom_in, R.anim.slide_bottom_out); ActivityCompatICS.startActivity(this, new Intent(mContext, MyOptionICS.class), options.toBundle()); } /** * 补间动画 * activity:当前activity的对象 * <p/> * sharedElement:一个view对象,用来和新的activity中的一个view对象产生动画 * <p/> * sharedElemetId:新的activity中的view的Id,这个view是用来和原始activity中的view产生动画的 * <p/> * 效果是:原始activity中的一个view随着新activity的慢慢启动而移动到新的activity中,实现补间动画 */ public void screenTransitAnim(View v, int id) { ActivityOptionsCompatICS options = ActivityOptionsCompatICS. makeSceneTransitionAnimation(this, v, id); ActivityCompatICS.startActivity(this, new Intent(mContext, MyOptionICS.class), options.toBundle()); } private void nextActivity(Class getclass) { startActivity(new Intent(mContext, getclass)); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_turn: scaleUpAnim(btnTurn); break; case R.id.img_te: thumbNailScaleAnim(imgTe); break; case R.id.img_bujian: screenTransitAnim(v, R.id.btn_bujian);//第二个共享元素的id break; } } @SuppressLint("NewApi") @Override public void onItemClick(View view, int position) { switch (position) { case 0: nextActivity(ZhiHuActivity.class); overridePendingTransition(R.anim.unzoom_in, R.anim.unzoom_out);//缩放 break; case 1: nextActivity(GifActivity.class); overridePendingTransition(R.anim.small_2_big, R.anim.fade_out);//缩放另一种效果 break; case 2: if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { Utils.showSnackbar(simpleList,"版本需要在5.0或以上","close"); return; } getWindow().setEnterTransition(new Explode());// 设置一个endter transition Intent i = new Intent(); i.setClass(mContext, AndroidL_NewApi.class); startActivity(i, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());//当你已经设置了允许使用Transition并设置了Transition动画,你就可以通过ActivityOptions.makeSceneTransitionAnimation()方法启动一个新的Activity来激活这个Transition: break; case 3: customAnim(); break; } } }