Activity transition(Activity转场动画效果)
来源:互联网 发布:moneywiz2 mac 编辑:程序博客网 时间:2024/05/17 07:57
参考:
Android5.0之Activity的转场动画
Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
系统内置常见转场动画:
// 必须在 StartActivity() 或 finish() 之后立即调用 Intent intent = new Intent(MainActivity.this, MainActivityI.class); startActivity(intent); overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Android5.0转场动画
1、ActivityOptionsCompat.makeCustomAnimation(context, enterResId, exitResId)
简单做一个定制的动画,这个参数很简单,传入一个进入的动画的id,和移除动画的id即可
类似于:overridePendingTransition。
//类似于:overridePendingTransition(R.anim.slide_bottom_in, R.anim.slide_bottom_out);//还不如直接用这个全版本的overridePendingTransitionActivityOptionsCompat options = ActivityOptionsCompat.makeCustomAnimation(MainActivity.this, R.anim.slide_bottom_in, R.anim.slide_bottom_out);Intent intent = new Intent(MainActivity.this, MainActivityI.class);startActivity(intent, options.toBundle());
2、ActivityOptionsCompat.makeScaleUpAnimation(source, startX, startY, startWidth, startHeight)
这个在4.x上有用,可以实现新的Activity从某个固定的坐标以某个大小扩大至全屏。
对于相册是很好的展示效果。
//让新的Activity从一个小的范围(比如第一个activity的一个按钮)扩大到全屏ActivityOptionsCompat options = ActivityOptionsCompat.makeScaleUpAnimation(btn2, btn2.getWidth() / 2, btn2.getHeight() / 2, //拉伸开始的坐标 0, 0);//拉伸开始的区域大小,这里用(0,0)表示从无到全屏Intent intent = new Intent(MainActivity.this, MainActivityI.class);startActivity(intent, options.toBundle());
3、ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElement, sharedElementName)
当你需要当前界面中的某个元素和新界面中的元素有关时,你可以使用这个动画:
1、无共享元素:
启动activity:
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this); Intent intent = new Intent(MainActivity.this, MainActivityI.class); startActivity(intent, optionsCompat.toBundle());
第二个activity:
public class MainActivityI extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { //设置允许使用转场动画 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); super.onCreate(savedInstanceState); setContentView(R.layout.activity_maini);// 滑动进入 Slide slide = new Slide(); slide.setDuration(2000); getWindow().setExitTransition(slide);//出去1动画 getWindow().setEnterTransition(slide);//进来的动画// 分解// Explode explode = new Explode();// explode.setDuration(2000);// getWindow().setExitTransition(explode);//出去的动画// getWindow().setEnterTransition(explode);//进来的动画// 淡入淡出// Fade fade = new Fade();// fade.setDuration(2000);// getWindow().setExitTransition(fade);//出去的动画// getWindow().setEnterTransition(fade);//进来的动画 }}
2、有一个共享元素:
①布局中共享的元素添加 android:transitionName=”mybtn1”:
<Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="跳转activity动画" android:transitionName="mybtn1" />
②activity中
Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, btn2, "mybtn1").toBundle(); Intent intent = new Intent(MainActivity.this, MainActivityI.class); startActivity(intent, bundle);
参数btn2:表示第一个和第二个activity中的共享元素(就是那个Button),
参数”mybtn1”:表示布局文件中transitionAnimation属性的值。
第二个activity中
①布局中共享的元素添加 android:transitionName:
注意:transitionName名称要对应且相同。
<Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="第二个界面的第一个按钮" android:transitionName="mybtn1" />
②activity中不做任何操作
3、有多个共享元素:
如果两个页面中有多个共享元素该怎么办呢?
android:transitionName属性还像上面一样设置,然后在启动Activity时我们可以通过Pair.create方法来设置多个共享元素。
启动activity:
①布局中共享的元素添加 android:transitionName属性,名称自定义:
<Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="跳转activity动画" android:transitionName="mybtn1" /> <Button android:id="@+id/btn3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="第一个界面的第二个按钮" android:transitionName="mybtn2" />
②activity中
Bundle bundle = ActivityOptions .makeSceneTransitionAnimation(MainActivity.this, Pair.create(((View) btn2), "mybtn1"), Pair.create(((View) btn3), "mybtn2")) .toBundle();Intent intent = new Intent(MainActivity.this, MainActivityI.class);startActivity(intent, bundle);
Pair.create方法中有两个参数,
第一个是共享元素的实例(注意要是View类型),
第二个参数是该View的transitionAnimation属性的值。
第二个activity中
①布局中共享的元素添加 android:transitionName:
注意:transitionName名称要对应且相同。
<Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="第二个界面的第一个按钮" android:transitionName="mybtn1" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="第二个界面的第二个按钮" android:transitionName="mybtn2" />
②activity中不做任何操作
- Activity transition(Activity转场动画效果)
- Activity转场动画效果
- Activity转场动画(透明Activity)
- Android Activity转场动画
- Android Activity转场动画
- Activity转场动画
- Activity、Fragment转场动画
- Activity之间转场动画
- Activity转场动画
- Android基础:Activity转场动画:overridePendingTransition(...)
- Transition(Activity切换过渡动画)
- Activity转场动画——ActivityOptions,activity转场动画(MD风格)
- Android activity 转场动画ActivityOptions
- activity 转场动画(全局)---随手
- Activity和Frament转场动画
- 安卓Activity转场动画
- Android Activity转场 -- 揭露动画
- Android 动画Activity转场动画入门
- Windows下用ndk编译ffmpeg
- ref 和out的使用还有区别
- 判断App版本 startfrom
- 智能指针
- 在eclipse中配置maven
- Activity transition(Activity转场动画效果)
- 支持移动端深度学习的几种开源框架
- js数组深复制和浅复制的区别
- 为什么模板不支持分离编译
- java对象的序列化和反序列化
- python播放mp3文件
- Mui+jsonp 跨域访问Uncaught SyntaxError: Unexpected token
- nginx+uwsgi+python捕获http消息并处理(一)
- 【举例】Adaboost算法的具体数学公式