android属性动画基础
来源:互联网 发布:java获取request对象 编辑:程序博客网 时间:2024/06/05 10:55
Android动画
android实现动画的方式
1. View Animation:补间动画 1. 位移,缩放,旋转,渐变,集合2. Drawable Animation:帧动画3. 自定义动画 1. 自己通过继承Animation自己实现动画类,但是有了属性动画,可以用属性动画替代这种做法.4. Property Animation:属性动画 1. 补间动画可以做的属性动画都可以做,反之则不是 2. android 3.0才有 3. 属性动画和补间动画的最大区别是 1. 补间动画,控件看似改变了位置,但是控件的焦点原来的位置
如果让android 3.0也可以执行属性动画?
使用nineoldandroids-2.2.0.jar
补间动画的实现原理/核心?
Animation.class中定义的protected void applyTransformation(float interpolatedTime, Transformation t)
,回调一些列的渐变值
//子类需要实现该方法,通过给定的interpolatedTime(0-1)的渐变值,实现自己的变化效果protected void applyTransformation(float interpolatedTime, Transformation t) {}
属性动画2个关键类
* public class ValueAnimator extends Animator public static ValueAnimator ofFloat(float... values) public static ValueAnimator ofInt(int... values)* public final class ObjectAnimator extends ValueAnimator public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) public static <T> ObjectAnimator ofInt(T target, Property<T, Integer> property, int... values)
通过xml配置属性动画
xml中的配置
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <objectAnimator android:duration="5000" android:propertyName="scaleX" android:valueFrom="0.0" android:valueTo="1.0" android:valueType="floatType" /> <objectAnimator android:duration="5000" android:propertyName="scaleY" android:valueFrom="0.0" android:valueTo="1.0" android:valueType="floatType" /> </set>
java代码中的实现
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_zhangxin = (ImageView) findViewById(R.id.iv_zhangxin); MyClick mc = new MyClick(); iv_zhangxin.setOnClickListener(mc); } private class MyClick implements OnClickListener { @Override public void onClick(View v) { //AnimatorInflater:动画加载器,功能类似布局加载器 Animator animator= AnimatorInflater.loadAnimator(MainActivity.this, R.animator.animator_set_x_y); animator.setDuration(5000); animator.setTarget(iv_zhangxin); animator.start(); } }
属性动画2个关键监听
* 监听动画过程:开始,结束,重复,取消 public void addListener(AnimatorListener listener) * 得到动画执行过程中的渐变值 public void addUpdateListener(AnimatorUpdateListener listener)
属性动画原理
和普通动画类似,就是生成一些列渐变值,然后计算不同时间点的渐变值,然后改变UI
练习
位移动画(translationX,translationY,translation)
ObjectAnimator animator = ObjectAnimator.ofFloat(mIv, "translationX", 0, 100, 200, 100); animator.setInterpolator(new AccelerateDecelerateInterpolator()); animator.setDuration(300); animator.start();
缩放(scrollX,scrollY,scroll)
ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(mIv, "scaleX", 0, 1, 2, 1, 0); scaleXAnimator.setDuration(1000); scaleXAnimator.start();
透明度(alpha)
ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(mIv, "alpha", 0, 1, 0); alphaAnimator.setDuration(2000); alphaAnimator.start();
旋转(rotateX,rotateY,rotation)
ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(mIv, "rotation", 0, 360, 0); rotationAnimator.setDuration(1000); rotationAnimator.start();
设置背景颜色渐变
ObjectAnimator backgroundColorAnimator = ObjectAnimator.ofObject(mIv, "backgroundColor", new ArgbEvaluator(), Color.RED, Color.BLUE); backgroundColorAnimator.setRepeatMode(ObjectAnimator.REVERSE); backgroundColorAnimator.setRepeatCount(ObjectAnimator.INFINITE); backgroundColorAnimator.start();
组合动画
ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(mIv, "rotation", 0, 360, 0);ObjectAnimator translationAnimator = ObjectAnimator.ofFloat(mIv, "translationX", 0, 100, 200, 100, 0);AnimatorSet set = new AnimatorSet();// set.playSequentially(rotationAnimator, translationAnimator);// 顺序播放set.playTogether(rotationAnimator, translationAnimator);// 一起播放set.setDuration(2000);set.start();
xml定义组合动画
Animator animator =
AnimatorInflater.loadAnimator(MainActivity.this, R.animator.set_rotation_translate);
animator.setTarget(mIv);
animator.start();监听动画执行过程
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 100); valueAnimator.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } }); valueAnimator.start();}
得到动画渐变值
valueAnimator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int progress = (Integer) animation.getAnimatedValue(); ((Button) findViewById(R.id.btn10)).setText(progress + "%"); }});
动画要注意事项
1,区分ValueAnimator和ObjectAnimator2,一定要记得调用animator.start方法,不然动画不会执行
0 0
- Android动画--属性动画--基础
- android属性动画--基础
- Android属性动画基础
- android属性动画基础
- Android属性动画--基础使用
- Android属性动画--基础使用
- Android属性动画基础介绍
- Android属性动画基础(2)
- Android属性动画基础用法
- Android 属性动画基础,入门
- Android基础:动画三:属性动画
- Android动画之属性动画基础用法
- android动画基础(一) View动画和属性动画
- Android基础——属性动画赏析
- 【Android - 基础】之Animator属性动画
- Android学习之属性动画基础
- Android 动画Proterty Animation基础(属性动画)
- Android动画--属性动画
- Redis笔记7:数据类型之有序集合(sorted set)
- ubuntu下多个gcc编译器的安装及切换
- JAVA IO学习笔记
- .Net遇到的问题以及解决方法
- .Net遇到的问题以及解决方法
- android属性动画基础
- c++简单计算器
- LeetCode第一题:Two Sum
- 61. Rotate List(unsolved)
- android全屏启动页[解决黑屏白屏]
- java 内存泄漏
- Mybatis中配置Mapper的方法
- hadoop mapreduce
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)