第六例:Activity的切换动画
来源:互联网 发布:天赐系统安装软件 编辑:程序博客网 时间:2024/06/05 19:48
在Android开发过程中,经常会碰到Activity之间的切换效果的问题 ,从Android2.0开始在Activity增加了一个方法:
public void overridePendingTransition (int enterAnim, int exitAnim)
其中:
enterAnim 定义Activity进入屏幕时的动画
exitAnim 定义Activity退出屏幕时的动画
overridePendingTransition 方法必须在startActivity()或者 finish()方法的后面。
但是这种老旧、生硬的方式怎么能适合我们的MD风格的App呢!好在google在新的sdk中给我们提供了另外一种Activity的过度动画—ActivityOptions
。并且提供了兼容包——ActivityOptionsCompat
。这篇博客我们就是来了解下这个新的activity过度机制。
ActivityOptionsCompat
是一个静态类,提供了为数不多的几个方法,下面我们来罗列一下:
1.
ActivityOptionsCompat.makeCustomAnimation(Context context, int enterResId, int exitResId)
2.
ActivityOptionsCompat.makeScaleUpAnimation(View source,int startX, int startY, int startWidth, int startHeight)
3.
ActivityOptionsCompat.makeThumbnailScaleUpAnimation(View source,Bitmap thumbnail, int startX, int startY)
4.
ActivityOptionsCompat.makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)
5.
ActivityOptionsCompat.makeSceneTransitionAnimation(Activity activity,Pair<View, String>… sharedElements)
package demo.my.com.myapidemo.app.ui;import android.app.Activity;import android.app.ActivityOptions;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Canvas;import android.os.Bundle;import android.view.View;import android.widget.Button;import demo.my.com.myapidemo.R;/** * Created by Hack on 2015/10/21. */public class Animation extends Activity { private static final String TAG = "apidemo"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_animation); // 获取点击按钮 Button button = (Button)findViewById(R.id.fade_animation); button.setOnClickListener(mFadeListener); button = (Button)findViewById(R.id.zoom_animation); button.setOnClickListener(mZoomListener); // SDK的版本判断 android.os.Build.VERSION_CODES.JELLY_BEAN:4.2及以上版本 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { button = (Button)findViewById(R.id.modern_fade_animation); button.setOnClickListener(mModernFadeListener); button = (Button)findViewById(R.id.modern_zoom_animation); button.setOnClickListener(mModernZoomListener); button = (Button)findViewById(R.id.scale_up_animation); button.setOnClickListener(mScaleUpListener); button = (Button)findViewById(R.id.zoom_thumbnail_animation); button.setOnClickListener(mZoomThumbnailListener); } else { findViewById(R.id.modern_fade_animation).setEnabled(false); findViewById(R.id.modern_zoom_animation).setEnabled(false); findViewById(R.id.scale_up_animation).setEnabled(false); findViewById(R.id.zoom_thumbnail_animation).setEnabled(false); } } //淡入淡出效果 旧式overridePendingTransition private View.OnClickListener mFadeListener = new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent(Animation.this, HelloWorld.class)); overridePendingTransition(R.anim.fade, R.anim.hold); } }; //缩放效果 旧式 private View.OnClickListener mZoomListener = new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent(Animation.this, HelloWorld.class)); overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit); } }; //淡入淡出效果 新式,使用ActivityOptions private View.OnClickListener mModernFadeListener = new View.OnClickListener() { public void onClick(View v) { ActivityOptions opts = ActivityOptions.makeCustomAnimation(Animation.this, R.anim.fade, R.anim.hold); startActivity(new Intent(Animation.this, HelloWorld.class), opts.toBundle()); } }; private View.OnClickListener mModernZoomListener = new View.OnClickListener() { public void onClick(View v) { ActivityOptions opts = ActivityOptions.makeCustomAnimation(Animation.this, R.anim.zoom_enter, R.anim.zoom_enter); startActivity(new Intent(Animation.this, HelloWorld.class), opts.toBundle()); } }; private View.OnClickListener mScaleUpListener = new View.OnClickListener() { public void onClick(View v) { ActivityOptions opts = ActivityOptions.makeScaleUpAnimation( v, 0, 0, v.getWidth(), v.getHeight()); startActivity(new Intent(Animation.this, HelloWorld.class), opts.toBundle()); } }; private View.OnClickListener mZoomThumbnailListener = new View.OnClickListener() { public void onClick(View v) { v.setDrawingCacheEnabled(true); v.setPressed(false); v.refreshDrawableState(); Bitmap bm = v.getDrawingCache(); ActivityOptions opts = ActivityOptions.makeThumbnailScaleUpAnimation( v, bm, 0, 0); startActivity(new Intent(Animation.this, HelloWorld.class), opts.toBundle()); v.setDrawingCacheEnabled(false); } };}
xml文件:
zoom_enter.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="2.0" android:toXScale="1.0" android:fromYScale="2.0" android:toYScale="1.0" android:pivotX="50%p" android:pivotY="50%p" android:duration="@android:integer/config_mediumAnimTime" /></set>
fade.xml
fromAlpha起始动画透明度
toAlpha结束动画透明度
取值:0.0~1.0之间的浮点型数值
0:完全透明1:不透明
<?xml version="1.0" encoding="utf-8"?><alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_longAnimTime" />hold.xml
整型值:
fromXDelta 属性为动画起始时 X坐标上的位置
toXDelta 属性为动画结束时 X坐标上的位置
fromYDelta 属性为动画起始时 Y坐标上的位置
toYDelta 属性为动画结束时 Y坐标上的位置
注意:
没有指定,
默认是以自己为相对参照物
长整型值:
duration 属性为动画持续时间
说明: 时间以毫秒为单位
在这些属性里面还可以加上%和p,例如:
android:toXDelta="100%",表示自身的100%,也就是从View自己的位置开始。
android:toXDelta="80%p",表示父层View的80%,是以它父层View为参照的。
<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromXDelta="0" android:toXDelta="0" android:duration="@android:integer/config_longAnimTime" />
参考文章:
http://blog.csdn.net/menxu_work/article/details/10258787
http://www.bkjia.com/Androidjc/1049811.html
- 第六例:Activity的切换动画
- Activity的切换动画
- Activity的切换动画
- Activity切换的动画
- Activity的切换动画
- Activity的切换动画
- viewfilper的切换动画,activity切换动画
- Activity 之间的切换动画
- Activity之间的切换动画
- Activity之间切换的动画
- Activity之间切换的动画
- Activity之间的动画切换
- Android Activity的切换动画
- activity切换时的动画
- Activity 间的动画切换
- Activity的动画切换效果
- Activity之间动画的切换
- Activity切换的动画效果
- 高斯消元法求解线性方程(c实现)
- React——JSX
- 移动端web页面使用position:fixed问题总结
- 指针数组和数组指针/链表的构建和排序
- 网页设计教程:从设计到制作过程
- 第六例:Activity的切换动画
- tasklet 与 softirq
- pyspark ERROR lzo.GPLNativeCodeLoader: Could not load native gpl library
- c++学习笔记(二):c++拷贝构造函数应用的四种场景
- 动态设置Fragment、view主题
- 多线程阅读收集
- AT指令编程必读
- 在PHP中调用接口
- Java ---序列化性能比较