博客
关于我
Material Design 系列 Transition
阅读量:515 次
发布时间:2019-03-07

本文共 3193 字,大约阅读时间需要 10 分钟。

Android Transition 系列技术全面解析

PathMotion 类

PathMotion 是一个抽象类,专门用于定义路径动画。该类通过 getPath 方法实现路径插值,允许开发者在两个点之间定义路径。默认实现采用直线路径,但可以通过继承该类扩展实现其他路径类型,如圆弧路径。

具体实现

public abstract class PathMotion {    public PathMotion() {}    public PathMotion(Context context, AttributeSet attrs) {}        public abstract Path getPath(float startX, float startY, float endX, float endY);}
  • 默认实现:提供一个直线路径动画,通过 moveTolineTo 方法定义路径。
  • 自定义实现:可以通过继承 PathMotion 并实现 getPath 方法,定义其他路径类型,如圆弧路径。

AutoTransition 类

AutoTransition 是一个工具类,用于自动处理多个场景的过渡。其主要功能包括:

  • 自动处理场景切换:支持 fade 出、 move 、 resize 和 fade 入的顺序执行。
  • 简化代码编写:通过继承 TransitionSet,自动初始化多个过渡动画。
  • 代码实现

    public class AutoTransition extends TransitionSet {    public AutoTransition() {        init();    }    public AutoTransition(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    private void init() {        setOrdering(ORDERING_SEQUENTIAL);        addTransition(new Fade(Fade.OUT));        addTransition(new ChangeBounds());        addTransition(new Fade(Fade.IN));    }}

    Change 系列

    Change 系列是一系列用于场景变化的过渡效果,主要包括:

    • ChangeBounds:捕捉目标视图的布局范围,处理场景大小变化。
    • ChangeClipBounds:处理视图裁剪范围。
    • ChangeImageTransform:处理图像变换。
    • ChangeScroll:处理滚动效果。
    • ChangeTransform:处理视图变换。

    这些类通过 Property 封装键值对,供 createAnimator 方法处理。

    官方示例实践

    BasicTransition 示例

    实现原理

  • 根布局:需要一个 rootView 作为过渡的根容器。
  • 场景切换:通过 TransitionManager.go(Scene) 接受场景变换。
  • 场景获取:通过 getSceneForLayout 方法获取预定义的场景。
  • 核心代码

    public class BasicTransitionFragment extends Fragment {    // ... 其他代码 ...        @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        mSceneRoot = (ViewGroup) view.findViewById(R.id.scene_root);        mScene1 = new Scene(mSceneRoot, (ViewGroup) mSceneRoot.findViewById(R.id.container));        mScene2 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene2, getActivity());        mScene3 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene3, getActivity());        mTransitionManagerForScene3 = TransitionInflater.from(getActivity())                .inflateTransitionManager(R.transition.scene3_transition_manager, mSceneRoot);        return view;    }        // ... 其他代码 ...}

    ActivitySceneTransitionBasic 示例

    实现原理

  • Activity 选项:使用 ActivityOptionsCompat 定义场景过渡动画。
  • Pair 对象:用于定义共享元素及其对应的视图 ID。
  • 核心代码

    @Overridepublic void onItemClick(AdapterView
    adapterView, View view, int position, long id) { Item item = (Item) adapterView.getItemAtPosition(position); Intent intent = new Intent(this, DetailActivity.class); intent.putExtra(DetailActivity.EXTRA_PARAM_ID, item.getId()); ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation( this, new Pair
    (view.findViewById(R.id.imageview_item), DetailActivity.VIEW_NAME_HEADER_IMAGE), new Pair
    (view.findViewById(R.id.textview_name), DetailActivity.VIEW_NAME_HEADER_TITLE) ); ActivityCompat.startActivity(this, intent, activityOptions.toBundle());}

    开源库推荐

    • Transition 融合:通过自定义 interpolator 实现更复杂的动画效果。
    • Android Animations:提供丰富的动画资源和示例。

    注意事项

  • 版本兼容性:Transition 系列在低版本 Android 系统中可能存在兼容性问题。
  • 动画优化:在动画结束后,建议调用 finishAfterTransition() 方法,避免使用 finish()
  • 通过以上技术,开发者可以轻松实现复杂的 UI 变换效果,提升应用的用户体验。

    转载地址:http://adwjz.baihongyu.com/

    你可能感兴趣的文章
    NLog 自定义字段 写入 oracle
    查看>>
    NLog类库使用探索——详解配置
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    NLP 模型中的偏差和公平性检测
    查看>>
    Vue3.0 性能提升主要是通过哪几方面体现的?
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP三大特征抽取器:CNN、RNN与Transformer全面解析
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP度量指标BELU真的完美么?
    查看>>
    NLP的不同研究领域和最新发展的概述
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    nmap 使用方法详细介绍
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    nmap指纹识别要点以及又快又准之方法
    查看>>
    Nmap渗透测试指南之指纹识别与探测、伺机而动
    查看>>