本系列文章一共5篇
誰說Android的動畫不廉價(一)之項目分層
誰說Android的動畫不廉價(二)之轉場動畫
誰說Android的動畫不廉價(三)之共享元素動畫
誰說Android的動畫不廉價(四)之元素動畫
誰說Android的動畫不廉價(五)之水波紋動畫
GitHub源碼
引言
本系列博文是閱讀Material-Animations源碼之后撰寫的。我認為例子中的動畫非??犰牛谴a寫得有點不是很清晰。有興趣的可以去閱讀一下上面例子的源碼,還是非常值得學習的。那么本系列博文主要是實現下面的效果。
效果圖

轉場動畫
共享元素動畫
元素動畫
水波紋動畫
- 第一種是
轉場動畫
,主要是用于Activity
切換的 - 第二種是
共享元素動畫
,主要是切換Activity
的時候,使兩個Activity
的某個元素產生動畫關聯 - 第三種是
元素動畫
,主要是ViewGroup
里面的子View
發生變化時產生的動畫 - 第四種是
水波紋動畫
,用于View
,一個字就是帥。。。
項目分層
基本布局
tool_bar.xml
因為大量的
Activity
使用Toolbar
,所以我們使用include
的方式去添加Toolbar
。前提是要編寫Toolbar
的布局文件。其他的布局就根據需要編寫咯。
因為用到Toolbar,所以需要修改AndroidManifest.xml
文件中設置的主題
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:titleTextColor="#ffffff"></android.support.v7.widget.Toolbar>
基本Activity
BaseActivity.java
考慮到項目Activity的進一步復用,所以我們定義抽象基類
BaseActivity
。
package demo.august1996.top.transitionanimationsdemo.Activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentViewID());
beforeInitView();
initView();
initData();
}
protected void beforeInitView() {
}
protected abstract void initView();
protected void initData() {
}
protected abstract int getContentViewID();
}
getContentViewID
是返回布局文件的layoutID
其他幾個函數的名字也能了解其對應的場景了吧?
ToolbarActivity.java
然后觀察我們項目大多數
Activity
都是有Toolbar
的,所以我們就添加ToolbarActivity
基類,繼承自BaseActivity
。
package demo.august1996.top.transitionanimationsdemo.Activity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import demo.august1996.top.transitionanimationsdemo.R;
public abstract class ToolbarActivity extends BaseActivity {
protected Toolbar mToolbar;
@Override
protected void beforeInitView() {
super.beforeInitView();
initToolbar();
}
private void initToolbar() {
mToolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle(getToolbarTitle());
if (canBack()) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finishAfterTransition();
}
});
}
}
protected boolean canBack() {
return false;
}
protected abstract String getToolbarTitle();
}
canBack
函數返回是否顯示Toolbar
左上角的返回鍵。
總結
其實根本沒什么總結,就是一個簡單的項目分層。下一篇博文開始進行編寫動畫的代碼。