美文网首页
Android动画总结二

Android动画总结二

作者: 海在路上 | 来源:发表于2017-11-11 00:41 被阅读8次

官方文档

属性动画的

一. 属性动画

1. ObjectAnimation

// 绕x轴旋转的度数。

ObjectAnimator.ofFloat(iv_ainm,"rotationX",0F,180F)

// 绕y轴旋转

ObjectAnimator.ofFloat(iv_ainm,"rotationY",0f,90f);

//绕着中心点旋转

ObjectAnimator.ofFloat(iv_ainm, "rotation", 0F, 180F);

// 沿着x轴位移

ObjectAnimator.ofFloat(iv_ainm,"translationX",200f);

// 沿着y轴位移

ObjectAnimator.ofFloat(iv_ainm,"translationY",800f);

//x轴缩放

ObjectAnimator.ofFloat(iv_ainm,"scaleX",1f,2f);     // 放大两倍

// y轴缩放

ObjectAnimator.ofFloat(iv_ainm,"scaleY",1f,2f);

// alpha

ObjectAnimator.ofFloat(iv_ainm,"alpha",1f,0.1f);

//开启属性动画:

objectAnimator.setDuration(2000);    

// 设置插值器。

objectAnimator.setInterpolator(new DecelerateInterpolator())

objectAnimator.start();

2. AnimatorSet

AnimatorSet set = new AnimatorSet();

// 一起播放

set.play(objectAnimator1).with(objectAnimator2);

// 在动画2之后动画1

set.play(objectAnimator1).after(objectAnimator2);

// 在动画2之前动画1

set.play(objectAnimator1).before(objectAnimator2);

3. ValueAnimator

ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,200);

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {         ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams)                 iv_ainm.getLayoutParams();

    @Override

    public void onAnimationUpdate(ValueAnimator animation) {

        float fraction = animation.getAnimatedFraction();

        Log.e(TAG,"fraction = " + fraction);

        float value = (float) animation.getAnimatedValue();

        Log.e(TAG,"value = " + value);

        Log.e(TAG,"fraction * value = " + fraction*value);

        layoutParams.width = (int) value;                        // 修改宽高。

        layoutParams.topMargin = (int) value;               // 修改外边距。

        iv_ainm.setPadding(left,top,right,bottom);        // 改变内边距。

        iv_ainm.setLayoutParams(layoutParams);

}});

valueAnimator.setDuration(2000).start();

4. 抛物线的实现:

ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,500);

valueAnimator.setDuration(2000);

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {     @Override

    public void onAnimationUpdate(ValueAnimator animation) {         iv_ainm.setTranslationX((float)animation.getAnimatedValue());

        long time = animation.getCurrentPlayTime();

        float g = 0.000125f;//500/2000/2000;

        Log.e(TAG,"g = " + g);

        int y = (int) ((g*time*time)/2);

        Log.e(TAG,"time = " + time);         

        Log.e(TAG,"y = " + y);

        iv_ainm.setTranslationY(y);

}});

valueAnimator.start();

5. TypeEvaluator

public class PointSinEvaluator implements TypeEvaluator {

    @Override

    public Pointevaluate(float fraction,Point startValue,Point endValue) {

        floatx = startValue.x+ fraction * (endValue.x- startValue.x);

        floaty = (float) (Math.sin(x * Math.PI/180) *100) + endValue.y/2;

        Point point =newPoint((int) x,(int) y);

        return point;

}

}

PointstartPoint =newPoint(0,0);

PointendPoint =newPoint(300,300);

ValueAnimator  valueAnimator = ValueAnimator.ofObject(new PointSinEvaluator(),startPoint,endPoint);

//valueAnimator.setEvaluator(newPointSinEvaluator());

valueAnimator.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

Point point = (Point) animation.getAnimatedValue();

Log.e(TAG,"point.x = "+ point.x+"    point.y = "+ point.y);

}

});

valueAnimator.start();

相关文章

网友评论

      本文标题:Android动画总结二

      本文链接:https://www.haomeiwen.com/subject/hlsvmxtx.html