Android学习知识Android资源收录程序员

谁说Android的动画不廉价(一)之项目分层

2017-03-07  本文已影响447人  Android开发哥

本系列文章一共5篇
谁说Android的动画不廉价(一)之项目分层
谁说Android的动画不廉价(二)之转场动画
谁说Android的动画不廉价(三)之共享元素动画
谁说Android的动画不廉价(四)之元素动画
谁说Android的动画不廉价(五)之水波纹动画
GitHub源码

引言

本系列博文是阅读Material-Animations源码之后撰写的。我认为例子中的动画非常酷炫,但是代码写得有点不是很清晰。有兴趣的可以去阅读一下上面例子的源码,还是非常值得学习的。那么本系列博文主要是实现下面的效果。

效果图

共享元素动画
元素动画
水波纹动画

项目分层

基本布局

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左上角的返回键。

总结

其实根本没什么总结,就是一个简单的项目分层。下一篇博文开始进行编写动画的代码。

上一篇下一篇

猜你喜欢

热点阅读