最近比较闲,再加上以前懒惰的习惯,决定尽量保持几天一篇博客,这次简单实现一下这个效果.其实主要是在网上看到了一篇博客,里面的效果比较炫,只是我觉得那个之前那个博客的动画有些地方的衔接没有做好,并且没有真正还原原设计,所以这里重新写了一下,简单的实现.原博客地址:http://www.jianshu.com/p/3ff40a06bef6,可以看看之前的实现效果以及原设计的效果。
录制效果有点渣.轻喷!
接上个gif图:
接下来就开始一步一步分析吧.
首先就是一个比较简单过场动画,具体什么是过场动画我就不多说了,不懂的详细了解一下我这里不讲原因,只讲讲如何实现。这里有2个activtiy,主要的东西其实都在第二个activity里.第一个页面就一个texteview不多说,详细说说第二个activity吧。
http://androidwing.net/index.php/172 这一篇我觉得很不错,大家可以看看。
既然是要实现过场动画,那首先第二个activity就要设置这样的属性
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
其中SIGNUP这个TextView是一个共享元素,在2个activity中具有一样的属性.在跳转到第二个activity之前.我们需要穿一些第一个activity中Textview的属性值过去.如下图:
public void singUp(View view){
//获取view在屏幕中的位置以及宽高做为参数传到第二个activity
int[] location = new int[2];
view.getLocationOnScreen(location);
Intent intent = new Intent(this, HomeActivity.class);
intent.putExtra("left", location[0]);
intent.putExtra("top", location[1]);
intent.putExtra("width", view.getWidth());
intent.putExtra("height", view.getHeight());
startActivity(intent);
overridePendingTransition(0, 0);
}
记住一点要调用overridePendingTransition(0, 0),关闭系统默认的跳转动画。
在第二个activity中接受到这些参数.
tv_sign_up.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
layout_sign_up.getViewTreeObserver().removeOnGlobalLayoutListener(this);
startRevel();
}
});
由于第二个acitivity中还有个success和一个下划线line.所以这里我把他们放在一个布局里了.
<RelativeLayout
android:id="@+id/layout_sign_up"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<TextView
android:id="@+id/tv_sign_up"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginBottom="20dp"
android:gravity="center"
android:text=