美文网首页Android学习知识Android资源收录程序员
谁说Android的动画不廉价(一)之项目分层

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

作者: Android开发哥 | 来源:发表于2017-03-07 12:45 被阅读447次

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

    引言

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

    效果图

    共享元素动画
    元素动画
    水波纹动画
    • 第一种是转场动画,主要是用于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左上角的返回键。

    总结

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

    相关文章

      网友评论

        本文标题:谁说Android的动画不廉价(一)之项目分层

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