Android 动画机制 之 属性动画
2016-03-25 14:19
531 查看
Android 3.0 之后,Google提出了属性动画,有了更加丰富的动画效果了!
优点:动画效果丰富(基本能实现所有动画),并且可以进行交互
一.ObjectAnimation
先上个实现透明度动画的例子:
可以看到,它的对象就直接使用静态工厂类就可以返回,
view : 需要动画的view
“translationX” : 要操作的属性 (后面会列举一些常用的属性)
0.1f : 这里是一个可变数组参数
必须注意: 使用ObjectAnimation的时候,要操作的属性必须具有get,set方法,否则无效
常用的属性值:
translationX,translationY:作为增量,控制view开始于左上角
rotation , rotationX ,rotationY : 控制view围绕支点进行2D和3D的旋转
scaleX ,scaleY : 控制view围绕支点进行2D缩放
pivotX ,pivotY : 控制view的支点位置(默认为view的中心点)
x , y : 表示view的容器中的最终位置,是左上角和translationX,translationY的累积和
alpha : 表示view对象的透明度,1代表不透明,0代表完全透明
使用以上几个属性就可以实现视图动画中的所有效果了!
对于没有get和set方法的属性,我也想用怎么办呢?
解决办法:自定义一个属性类或者包装类来间接的增加get和set方法
例子:
使用也比较简单了
使用ObjectAnimation只能对一种属性进行动画效果,那么想要多个动画呢?
二:动画集合
方式一: PropetyValuesHolder
方式二:AnimationSet
未完待续!!
优点:动画效果丰富(基本能实现所有动画),并且可以进行交互
一.ObjectAnimation
先上个实现透明度动画的例子:
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", 0.1f); animator.setDuration(3000); animator.start();
可以看到,它的对象就直接使用静态工厂类就可以返回,
view : 需要动画的view
“translationX” : 要操作的属性 (后面会列举一些常用的属性)
0.1f : 这里是一个可变数组参数
必须注意: 使用ObjectAnimation的时候,要操作的属性必须具有get,set方法,否则无效
常用的属性值:
translationX,translationY:作为增量,控制view开始于左上角
rotation , rotationX ,rotationY : 控制view围绕支点进行2D和3D的旋转
scaleX ,scaleY : 控制view围绕支点进行2D缩放
pivotX ,pivotY : 控制view的支点位置(默认为view的中心点)
x , y : 表示view的容器中的最终位置,是左上角和translationX,translationY的累积和
alpha : 表示view对象的透明度,1代表不透明,0代表完全透明
使用以上几个属性就可以实现视图动画中的所有效果了!
对于没有get和set方法的属性,我也想用怎么办呢?
解决办法:自定义一个属性类或者包装类来间接的增加get和set方法
例子:
public class WrapperView { private View mTarget; public WrapperView(View target){ this.mTarget = target; } public int getWidth(){ return mTarget.getLayoutParams().width; } public void setWidth(int width) { mTarget.getLayoutParams().width = width; mTarget.requestLayout(); } }
使用也比较简单了
WrapperView wrapperView = new WrapperView(textView); ObjectAnimator.ofInt(wrapperView,"width",500).setDuration(3000).start();
使用ObjectAnimation只能对一种属性进行动画效果,那么想要多个动画呢?
二:动画集合
方式一: PropetyValuesHolder
//位移动画 PropertyValuesHolder translationX = PropertyValuesHolder.ofFloat("translationX", 300f); //缩放动画--X轴 PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX", 1f, 0, 1f); //缩放动画--Y轴 PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY", 1f, 0, 1f); //集合到一起,并开启动画 ObjectAnimator.ofPropertyValuesHolder(textView, translationX, scaleX, scaleY).setDuration(3000).start();
方式二:AnimationSet
ObjectAnimator translationX = ObjectAnimator.ofFloat(textView, "translationX", 300f); ObjectAnimator scaleX = ObjectAnimator.ofFloat(textView, "scaleX", 1f, 0, 1f); ObjectAnimator scaleY = ObjectAnimator.ofFloat(textView, "scaleY", 1f, 0, 1f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(3000); animatorSet.playSequentially(translationX,scaleX,scaleY); animatorSet.start();
未完待续!!
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories