Android View动画框架
来源:互联网 发布:沙盘模拟软件下载 编辑:程序博客网 时间:2024/05/21 07:49
一,视图动画:
Animation框架定义了透明度alpha/旋转rotate/缩放scale/位移translate四种常见的动画,而且控制的是整个View,实现原理是每次绘制视图时View所在的ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算成功画帧。如果动画没有完成,就继续调用invalidate()函数,启动下次绘制来驱动动画,从而完成整个动画的绘制。
在Android3.0之前,视图动画一家独大,但随之后属性动画框架的推出,它的风光大不如前了。相比属性动画,视图动画一个非常大的缺陷就是不具备交互性,当某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互发生,且效率较高使用方便。
视图动画方式:
1,透明度:
AlphaAnimation aa=new AlphaAnimation(0,1);
aa.setDuration(1000);
view.startAnimation(aa);
2,旋转动画:
RotateAnimation ra=new RotateAnimation(0,360,RoatateAnimation.RELATIVE_TO_SELF,0.5F,RoatateAnimation.RELATIVE_TO_SELF,0.5F);
ra.setDuration(1000);
view.startAnimation(ra);
3,缩放动画:
ScaleAnimation sa=new ScaleAnimation(0,1,0,1,RoatateAnimation.RELATIVE_TO_SELF,0.5F,RoatateAnimation.RELATIVE_TO_SELF,0.5F);
sa.setDuration(1000);
view.startAnimation(sa);
4,位移动画:
TranslateAnimation ta=new TranslateAnimation(0,200,0,300);
ta.setDuraton(1000);
view.startAnimation(ta);
5,动画集合:
AnimationSet as =new AnimationSet(true);
as.setDuration(1000);
AlphaAnimation aa=new AlphaAnimation(0,1);
aa.setDuration(1000);
as.addAnimation(aa);
TranslateAnimation ta=new TranslateAnimation(0,200,0,300);
ta.setDuraton(1000);
as.addAnimation(ta);
view.startAnimation(as);
视图动画监听回调:
animation.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation animation){
}
@Override
public void onAnimationEnd(Animation animation){
}
@Override
public void onAnimationRepeat(Animation animation){
}
});
二,属性动画:
Animator 框架中使用最多就是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator进行更精细化控制,只控制一个对象的一个属性值,而使用多个ObjectAnimator组合到AnimatorSet形成一个动画。而且ObjectAnimator能够自动驱动,可以调用setFrameDelay(longframeDelay)设置动画帧之间的间隙时间,调整帧率,减少动画过程中频繁绘制界面,而在不影响动画效果的前提下减少CPU资源消耗。最重要的是,属性东湖通过属性的get,set方法来真实地控制一个View的属性值,因此强大的属性动画框架,基本可以实现所有的动画效果。
1,ObjectAnimator
ObjectAnimator animator=ObjectAnimator.ofFloat(view,"translationX",300);
animator.setDuration(300);
animator.start();
不过,在使用ObjectAnimator的时候,有一点非常重要,那就是要操纵属性必须具有get,set方法,不然ObjectAnimator就无法起效。
下面常见的可以直接使用属性值和属性动画:
1.translationX和translationY:这两个属性作为一种增量来控制着View对象从它布局容器的左上角坐标偏移的位置。
2.rotation/rorationX和rorationY:这三个属性控制View对象围绕支点进行2D和3D旋转。
3.scaleX和scaleY:这两个属性控制着View对象围绕它的支点进行2D缩放。
4.pivotX和privotY:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认情况下该支点就是View对象中心点。
5.x和y:这是两个简单实用的属性,它描述了View对象在它的容器中的最终位置,它是最初的左上角坐标和translationX/translationY值的累积和。
6.alpha:它表示View对象的alpha透明度。默认值1(不透明),0代表完全透明(不可见)。
属性动画监听回调:
ObjectAnimator anima =ObjectAnimator.ofFloat(View,"alpha",0.5f);
anima.addListener(new AnimatorListener(){
@Overrider
public void onAnimationStart(Animator animation){
}
@Overrider
public void onAnimationRepeat(Animator animation){
}
@Overrider
public void onAnimationEnd(Animator animation){
}
@Overrider
public void onAnimationCancel(Animator animation){
}
});
anima.start();
选择性进行监听:
anima.addListener(new AnimatorListenerAdapter(){
@Override
public void onAnimationEnd(Animator animation){
}
});
属性动画集合:
三,自定义动画:
applyTransformation(float interpolatedTime ,transformation t)
第一个参数插值器的时间因子,取值范围为0~1.0之间。就像规定时间内长跑,有的选择开始一段时间加速度,有的选择结束一段时间加速度,最后到终点时间都一样。
第二参数是矩阵的封装类。一般使用它获取矩阵对象 t.getMatrix()。
例:模拟电视机关闭效果,让一个突破纵向比例不断缩小。
final Matrix matrix =t.getMatrix();
matrix.preScale(1,
1-interpolatedTime,
mCenterWidth,
mCenterHeight);
结合矩阵,Camera类实现自定义3D动画效果:想象移动一个真实是相机拍摄固定物体的立体感图像。
@Override
public void initialize(int width , int height,
int parentWidth , int parentHeight){
super.initialize(width, height,patentWidth,patentHeight);
//设置默认时长
setDuration(2000);
//动画结束后保留状态
setFillAfter(ture);
//设置默认插值器
setInterpolator(new BounceInterpolator());
mCenterWidth = width / 2;
mCenterHeight =height / 2;
}
//接下里,自定义动画的核心——如何定义动画的进行过程
@Ovrride
protected void applyTransformation(
float interpolateTime,
Transformation t){
final Matrix matrix =t.getMatrix();
mCamera.save();
//使用Camera设置旋转的角度
mCamera.rotateY(mRotateY * interpolatedTime);
//将旋转变换作用到mateix上
mCamera.getMatrix(matrix);
mCamera.restore();
//通过pre方法设置矩阵作用前的偏移量来改变旋转中心
matrix.pretranslate(mCenterWidth , mCenterHeight);
matrix.posttranslate(-mCenterWidth , -mCenterHeight);
}
- Android View动画框架
- Android自定义动画框架让View实现Path动画
- Android动画-View动画
- Android动画二:View动画
- Android动画之------View动画
- Android动画-View动画,插值器
- Android动画之View动画
- Android动画机制与使用技巧(一)——Android View动画框架
- Android View 动画问题
- Android View.startAnimation()动画
- android view动画
- android view 执行动画
- android view动画问题
- android View动画初探
- Android view动画问题
- android中的view动画
- android动画 -- view Animation
- Android读书笔记-----View动画
- 解决加入图片后R变红 的问题
- Windows下CMD常用命令
- 第十六章 SpringMVC静态资源映射
- html5学习笔记2-最简单的页面布局 (
- linux 终端打开文件浏览窗口
- Android View动画框架
- 大数据时代的结构化存储—HBase在阿里的应用实践
- 基于小波变换的多聚焦图像融合算法——Python实现
- python进阶11:创建类和实例
- ubuntu 12.04 hadoop2.7.3 环境配置
- 第十七章 SpringMVC拦截器配置
- js 识别web和手机浏览器
- mysql 的sql优化
- Proc对象