一个使用openGL渲染的炫丽Android动画库

MagicSurfaceView v1.1.0发布, 新增碎片化曲面动画

地址:https://github.com/gplibs/android-magic-surface-view

示例效果 :

新增 MagicMultiSurface

// 创建一个多曲面MagicMultiSurface对象
MagicMultiSurface multiSurface = new MagicMultiSurface(view, 20, 10) // view为要进行动画操作的View, (20,10)表示将曲面分解成 20行 10列 共两百个子曲面
.setUpdater(mMultiUpdater) // 设置 MagicMultiSurfaceUpdater 对子曲面进行动画操作 详情见 "MagicMultiSurfaceUpdater"
.setVisible(true) // 设置模型是否要渲染 (默认为true)
.setShininess(64) // 设置模型材质光泽度,默认64; 数值越大越光滑, 只对光照生效,无光照效果可忽略.
.setEnableBlend(true) // 是否开启混合,为透明对象时需开启,(默认为开启)
.setEnableDepthTest(true); // 是否开启深度测试,开启后会按三维坐标正常显示,如果关闭,绘制时将覆盖之前已经绘制的东西,(默认为开启)

及对应 MagicMultiSurfaceUpdater

MagicMultiSurfaceUpdater 对 MagicMultiSurface 中每个子模型进行矩阵变换及颜色值修改,

调用过程为 willStart -> didStart -> (updateBegin -> (update [遍历每个子模型]) -> updateEnd [此部分通过notifyChanged触发,循环调用直到 调用 Updater stop方法]) -> didStop

public class MyMultiSurfaceUpdater extends MagicMultiSurfaceUpdater {

    // 在绘制第一帧之前调用 (可以在此方法里进行一些初始化操作)
@Override
protected abstract void willStart(MagicMultiSurface surface) {
} // 在开始绘制后调用(绘制第一帧后调用,一般动画可以在此开始)
// 动画有更新时,需调用 notifyChanged()方法 通知框架可以调用 update 相关方法进行更新。
@Override
protected abstract void didStart(MagicMultiSurface surface) {
} // 当调用 updater stop方法之后,真正停止后会回调此方法
@Override
protected abstract void didStop(MagicMultiSurface surface) {
} // 每次各子模型更新之前调用
@Override
protected abstract void updateBegin(MagicMultiSurface surface) {
} /**
* 修改r行 c列处子模型的矩阵matrix, 及子模型颜色color
* @param surface
* @param r 行
* @param c 列
* @param matrix 矩阵
* @param offset 偏移量 (跟MagicSurfaceMatrixUpdater中偏移量一样的意义,只是此处为某个子模型的偏移量)
* @param color 默认值为 rgba(1,1,1,1), 计算完成后的新颜色要更新到此变量 模型最终颜色计算方法参考 "顶点最终颜色计算过程"
*/
@Override
protected abstract void update(MagicMultiSurface surface, int r, int c, float[] matrix, Vec offset, Vec color) {
// 重置矩阵
// reset(matrix); // 平移
// translate(matrix, offset); // 旋转
//rotate(matrix, mAxis, angle); // 缩放
//scale(matrix, mScale); // 修改颜色
// color.setColor(xxx);
} // 每次所有子模型更新完成后调用
@Override
protected abstract void updateEnd(MagicMultiSurface surface) {
// 可以在此方法里判断动画是否结束,结束需调用 stop()方法,以结束updater.
}
}

一个使用openGL渲染的炫丽Android动画库二(碎片化曲面动画)的更多相关文章

  1. 一个使用openGL渲染的炫丽Android动画库

    android-magic-surface-view 这是一个 android 动画特效库, 可以实现各种炫酷动画. github地址: https://github.com/gplibs/andro ...

  2. 【轮子】发现一个效果丰富酷炫的Android动画库

    没有什么比发现一个好轮子更让人开心的了. 这个库分分钟提高交互体验 :AndroidViewAnimations 一张图说明一切 配置和使用也相当简单 GitHub地址

  3. 让动画不再僵硬:Facebook Rebound Android动画库介绍

    introduction official site:http://facebook.github.io/reboundgithub : https://github.com/facebook/reb ...

  4. Android从开源到碎片化 开发者叛离的真相

    Android从诞生开始就受到热捧,并日益普及.它有别于以往的手机及移动终端操作系统,其独具的开源性.系统廉价性和提供给第三方大自由度的创新空间,以及不受硬件约束的优势,获得了广大开放社群的支持.但是 ...

  5. android 学习随笔二十六(动画:属性动画)

    属性动画,属性动画是真正改变对象的某个属性的值 * 补间动画,只是一个动画效果,组件其实还在原来的位置上,xy没有改变1.位移:* 第一个参数target指定要显示动画的组件* 第二个参数proper ...

  6. android 学习随笔二十五(动画:补间动画)

    补间动画(TweenAnimation) * 原形态变成新形态时为了过渡变形过程,生成的动画就叫补间动画(为了让对象从初始状态向结束状态改变的过程更加自然而自动生成的动画效果)* 位移.旋转.缩放.透 ...

  7. android 学习随笔二十四(动画:帧动画)

    帧动画,一张张图片不断的切换,形成动画效果 * 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 * FrameAnimatio ...

  8. 使用 Facebook开源动画库 POP 实现真实衰减动画

    1. POP动画基于底层刷新原理.是基于CADisplayLink,1秒钟运行60秒,接近于游戏开发引擎 @interface ViewController () @property (nonatom ...

  9. Facebook Rebound 弹性动画库 源码分析

    Rebound源码分析 让动画不再僵硬:Facebook Rebound Android动画库介绍一文中介绍了rebound这个库. 对于想体验一下rebound的效果,又懒得clone和编译代码的, ...

随机推荐

  1. Docker系列一之基础快速入门企业实战

    1.1什么是LXC LXC为Linux Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚 ...

  2. XJOI1657&Codevs1255搭积木【树状动规】

    搭积木 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木数是他的低一层的积木数+1或-1.总共有N个积木.(且每行积木数不超过10)比如上图N=13 H=6 M=2. 输入格式: 第一行 ...

  3. 老李分享:SSL协议相关证书

    老李分享:SSL协议相关证书   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

  4. poptest老李谈动态口令原理

    poptest老李谈动态口令原理     poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908 ...

  5. JavaScript数组基础编程题归纳

    之前的随笔"JavaScript中数组类型的属性和方法"中有介绍很多数组类型的方法,但都是一些理论.最近在练习在线编程题,发现自己还是习惯于用常规的循环来答题,对于数组的方法的使用 ...

  6. 跟着刚哥梳理java知识点——异常(十一)

    异常:将程序执行中发生的不正常情况(当执行一个程序时,如果出现异常,那么异常之后的代码就不在执行.) java.lang.Throwable:异常的超类 1.Error:java虚拟机无法解决的严重问 ...

  7. 利刃 MVVMLight 6:命令基础

    在MVVM Light框架中,事件是WPF应用程序中UI与后台代码进行交互的最主要方式,与传统方式不同,mvvm中主要通过绑定到命令来进行事件的处理, 因此要了解mvvm中处理事件的方式,就必须先熟悉 ...

  8. oracle 归档日志满 报错ORA-00257: archiver error. Connect internal only, until freed

    归档日志满导致无法用户无法登陆 具体处理办法 --用户登陆 Microsoft Windows [Version 6.1.7601] Copyright (c) Microsoft Corporati ...

  9. 过滤器Filter(17/4/8)

    1:是JavaWeb三大组件之一: Servlet.Lisener(2个感知监听器不需要配置).Filter 2:过滤器 它会在一组资源(jsp.servlet.css.html等等)的前面执行! 它 ...

  10. Python数据处理——numpy_3

    通过前面两次的学习,基本上对numpy有了一定的认识,所以,接下来进一步对numpy学习.同时,最后以一个有趣的例子加深对numpy的理解. import numpy as np xarr = np. ...