美文网首页
android 过渡动画

android 过渡动画

作者: Lz_Docker | 来源:发表于2016-11-03 14:33 被阅读0次

一.Activity的转场动画

1.overridePendingTransition(enterAnim, exitAnim);

重写Activity的 overridePendingTransition 方法;

需要四个anim目录下的xml文件

// 在finish或startActivity 方法 之后,立刻调用 overridePendingTransition 设置activity 切换的动画
// 参数一:开启的activity执行的动画
// 参数二:结束的activity执行的动画

执行切换到下一个页面的动画
overridePendingTransition(R.anim.next_in, R.anim.next_out);

// 执行切换到上一个页面的动画
overridePendingTransition(R.anim.pre_in, R.anim.pre_out);

next_in
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0" >
</translate>

next_out
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:toXDelta="-100%p" >
</translate>

pre_in
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="-100%p"
android:toXDelta="0" >
</translate>

pre_out
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:toXDelta="100%p" >
</translate>

2.makeScaleUpAnimation
makeScaleUpAnimation
这种方式个人感觉用途还是很广的,效果就是不断的 放大一个view,进而进行activity的过度, 看代码,

private void launch(View view) { ActivityOptionsCompat compat = 
ActivityOptionsCompat.makeScaleUpAnimation(view, view.getWidth() / 2, view.getHeight() / 2, 0, 0); 
ActivityCompat.startActivity(this, new Intent(this, Activity2.class), compat.toBundle());
}

第1个参数是scale哪个view的大小,第2和3个参数是以view为基点,从哪开始动画,这里是该view的中心,4和5参数是新的activity从多大开始放大,这里是从无到有的过程。

3.多个view的协作 makeSceneTransitionAnimation

代码为:

private void launch2() {    Pair<View, String> imagePair = Pair.create((View)imageView, 
getString(R.string.image));    Pair<View, String> textPair = Pair.create((View)textView, 
getString(R.string.name));    ActivityOptionsCompat compat = ActivityOptionsCompat      
      .makeSceneTransitionAnimation(this, imagePair, textPair);    ActivityCompat.startActivity(this, new 
Intent(this, makeSceneTrans.class),            compat.toBundle());
}

xml 文件为:

mainactivity

<TextView    android:id="@+id/text"  
  android:textSize="20sp" 
   android:layout_width="wrap_content"    
android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"    
android:layout_centerHorizontal="true"    
android:text="makeSceneTrans 多view协作"   
 android:transitionName="@string/name"    />

<ImageView    
android:id="@+id/image"   
 android:layout_width="100dp"  
  android:layout_height="100dp" 
   android:layout_above="@id/text"   
 android:layout_centerHorizontal="true"  
  android:src="@drawable/ic_avatar3"   
 android:transitionName="@string/image" />

activity2

<ImageView    android:id="@+id/image"   
 android:layout_width="wrap_content" 
   android:layout_height="300dp"   
 android:layout_alignParentTop="true"   
 android:layout_centerHorizontal="true"  
  android:src="@drawable/ic_avatar3"  
  android:scaleType="fitXY"  
  android:transitionName="@string/image" />

<TextView  
  android:id="@+id/text"   
 android:textSize="20sp"    
android:layout_width="wrap_content"   
 android:layout_height="wrap_content"  
  android:layout_below="@id/image"    
android:layout_centerHorizontal="true"   
 android:text="makeSceneTrans 返回"  
  android:transitionName="@string/name"    />

ImageView的android:transitionName属性,我们指定为name是image的string,第二个activity的布局文件也有一个transitionName是name为image的string
其中最重要的是 transitionName 这个属性 需要协调的view都添加这个属性 ,告诉系统都是谁参与。

  1. 水波纹平铺 等过渡效果
    参考自:
    https://github.com/XunMengWinter/CircularAnim

that's all
这些应该能满足大部分的 activity的转场动画了。

代码连接:
https://github.com/LzDocker/MyActivityDemofirst

相关文章

网友评论

      本文标题:android 过渡动画

      本文链接:https://www.haomeiwen.com/subject/xasvuttx.html