谁说Android的动画不廉价(一)之项目分层
16lz
2021-12-04
本系列文章一共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
文件中设置的主题
<?xml version="1.0" encoding="utf-8"?>
基本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(安卓)屏幕元素层次结构
- Android常用基本界面元素汇总
- animation的xml定义中的android:interpolator属性
- android常用布局
- android几种布局
- RotateAnimation 设置旋转中心点、不停顿
- Android布局属性全面剖析
- android之interpolator的用法详解
- android 旋转动画