Android 组合动画包括四种属性动画和一种帧动画,自由组合,动态控制,只需在服务器修改json。

先说明一下,由于我们项目中每个版本都会让加一些礼物动画效果,但是产品说想不用更新版本,能动态添加,也就是说想加什么动画,不用我们动代码了,他们只需要把动画的图片放到服务器就行了,但是每个动画的效果都是不一样的,所以想实现能适合所有动画的
import java.io.File;
import java.lang.ref.SoftReference;
import java.util.List;

import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;

import com.ccvideo.R;
import com.yizhibo.video.bean.AnimationBean;
import com.yizhibo.video.utils.ViewUtil;
import com.yizhibo.video.view.gift.workers.CustomWorker;

/**
 * Created by guoliuya on 16/7/19.
 * 分开执行,所有动画按照时间顺序执行
 */
public class CommonAnimationView extends FrameLayout {
    private Bitmap[] mBitmap;
    private ImageView[] mImageView;
    private AnimationBean animationBean;
    private File file;
    private FrameLayout mParentView;
    private boolean runOneTime;
    private MyHandler mHandler;

    protected static class MyHandler extends Handler {
        private SoftReference<CommonAnimationView> softReference;

        public MyHandler(CommonAnimationView allChannelGiftAnimation) {
            softReference = new SoftReference<CommonAnimationView>(allChannelGiftAnimation);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            final CommonAnimationView allChannelGiftAnimation = softReference.get();
            if (allChannelGiftAnimation == null) {
                return;
            }
            switch (msg.what) {

            }

        }
    }

    public CommonAnimationView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public CommonAnimationView(Context context) {
        super(context);
        init(context);
    }

    private void init(Context context) {
        mHandler = new MyHandler(this);
        mParentView = (FrameLayout) LayoutInflater.from(context)
                .inflate(R.layout.custom_parent_view, null);
        addView(mParentView);
    }

    public void setBitMap(CustomWorker.Resource resource, AnimationBean animationBean, File file) {
        this.mBitmap = resource.bitmaps;
        this.animationBean = animationBean;
        this.file = file;
        mImageView = new ImageView[resource.bitmaps.length];
        for (int i = 0; i < resource.bitmaps.length; i++) {
            mImageView[i] = new ImageView(getContext());
            mParentView.addView(mImageView[i]);
            mImageView[i].setVisibility(View.INVISIBLE);
            //            mImageView[i].setImageBitmap(resource.bitmaps[i]);
        }
    }

    public void beginAnimation() {
        List<AnimationBean.DataEntity> data = animationBean.getData();
        for (int i = 0; i < data.size(); i++) {
            String absolutePath = file.listFiles()[i + 3].getAbsolutePath();
            String imageName = data.get(i).getImageName();
            if (file.listFiles()[i + 3].getAbsolutePath().contains(data.get(i).getImageName())) {
                List<AnimationBean.DataEntity.AnimationEntity> animation = data.get(i).getAnimation();
                int width = percentConvertPx(data.get(i).getWidth());
                int height = percentConvertPy(data.get(i).getHeight());
                //                mImageView[i].setVisibility(View.GONE);
                //设置每张图片的初始位置
                for (int j = 0; j < animation.size(); j++) {
                    if (animation.get(j).getAnimType().equals("translate")) {
                        int startTranslateX = percentConvertPx(animation.get(j).getStartTranslateX());
                        int startTranslateY = percentConvertPy(animation.get(j).getStartTranslateY());
                        int endTranslateX = percentConvertPx(animation.get(j).getEndTranslateX());
                        int endTranslateY = percentConvertPy(animation.get(j).getEndTranslateY());
                        int duration = animation.get(j).getDuration();
                        int startTime = animation.get(j).getStartAnimationTime();
                        double pivotX = animation.get(j).getPivotX();
                        double pivotY = animation.get(j).getPivotY();
                        postDelayed(
                                new myTranslateThread(data.get(i).getLocationX(), data.get(i).getLocationY(),
                                        startTranslateX, startTranslateY, endTranslateX, endTranslateY,
                                        mImageView[i], duration, mBitmap[i], width, height, (float) pivotX,
                                        (float) pivotY), startTime);
                    } else if (animation.get(j).getAnimType().equals("scale")) {
                        double startScaleS = animation.get(j).getStartScaleS();
                        double endScaleS = animation.get(j).getEndScaleS();
                        double startScaleSy = animation.get(j).getStartScaleSy();
                        double endScaleSy = animation.get(j).getEndScaleSy();
                        int duration = animation.get(j).getDuration();
                        int startTime = animation.get(j).getStartAnimationTime();
                        double pivotX = animation.get(j).getPivotX();
                        double pivotY = animation.get(j).getPivotY();
                        postDelayed(new myScaleThread(data.get(i).getLocationX(), data.get(i).getLocationY(),
                                startScaleS, endScaleS, startScaleSy, endScaleSy, mImageView[i], duration,
                                mBitmap[i], width, height, (float) pivotX, (float) pivotY), startTime);
                    } else if (animation.get(j).getAnimType().equals("alpha")) {
                        double startAlphaA = animation.get(j).getStartAlphaA();
                        double endAlphaA = animation.get(j).getEndAlphaA();
                        int duration = animation.get(j).getDuration();
                        int startTime = animation.get(j).getStartAnimationTime();
                        double pivotX = animation.get(j).getPivotX();
                        double pivotY = animation.get(j).getPivotY();
                        postDelayed(new myAlphaThread(data.get(i).getLocationX(), data.get(i).getLocationY(),
                                        startAlphaA, endAlphaA, mImageView[i], duration, mBitmap[i], width, height,
                                        (float) pivotX, (float) pivotY),
                                startTime);
                    } else if (animation.get(j).getAnimType().equals("rotation")) {
                        double startRotationX = animation.get(j).getStartRotationX();
                        double startRotationY = animation.get(j).getStartRotationY();
                        double endRotationX = animation.get(j).getEndRotationX();
                        double endRotationY = animation.get(j).getEndRotatioonY();
                        int duration = animation.get(j).getDuration();
                        int startTime = animation.get(j).getStartAnimationTime();
                        double pivotX = animation.get(j).getPivotX();
                        double pivotY = animation.get(j).getPivotY();
                        postDelayed(
                                new myRotationThread(data.get(i).getLocationX(), data.get(i).getLocationY(),
                                        startRotationX, endRotationX, startRotationY, endRotationY,
                                        mImageView[i], duration, mBitmap[i], width, height, (float) pivotX,
                                        (float) pivotY), startTime);
                    } else if (animation.get(j).getAnimType().equals("frame")) {
                        int duration = animation.get(j).getDuration();
                        int startTime = animation.get(j).getStartAnimationTime();
                        double pivotX = animation.get(j).getPivotX();
                        double pivotY = animation.get(j).getPivotY();
                        postDelayed(new myFrameThread(data.get(i).getLocationX(), data.get(i).getLocationY(),
                                mImageView[i], duration, mBitmap, mBitmap[i], width, height, (float) pivotX,
                                (float) pivotY), startTime);
                    }
                }
            }
        }
    }

    private void translate(int startX, int startY, int endX, int endY, ImageView target, int duration) {
        target.setVisibility(View.VISIBLE);
        PropertyValuesHolder xValue = PropertyValuesHolder.ofFloat("x", startX, endX);
        PropertyValuesHolder yValue = PropertyValuesHolder.ofFloat("y", startY, endY);
        ObjectAnimator anim = ObjectAnimator
                .ofPropertyValuesHolder(target, xValue, yValue);
        anim.setDuration(duration);
        anim.start();
    }

    private void alpha(float alpha1, float alpha2, ImageView target, int duration) {
        target.setVisibility(View.VISIBLE);
        PropertyValuesHolder alphaValue = PropertyValuesHolder.ofFloat("alpha", alpha1, alpha2);

        ObjectAnimator anim = ObjectAnimator
                .ofPropertyValuesHolder(target, alphaValue);
        anim.setDuration(duration);
        anim.start();
    }

    private void scale(float startX, float endX, float startY, float endY, ImageView target, int duration) {
        target.setVisibility(View.VISIBLE);
        PropertyValuesHolder scaleXValue = PropertyValuesHolder.ofFloat("scaleX", startX, endX);
        PropertyValuesHolder scaleYValue = PropertyValuesHolder.ofFloat("scaleY", startY, endY);
        ObjectAnimator anim = ObjectAnimator
                .ofPropertyValuesHolder(target, scaleXValue, scaleYValue);
        anim.setDuration(duration);
        anim.start();
    }

    private void rotation(float startX, float endX, float startY, float endY, ImageView target,
            int duration) {
        target.setVisibility(View.VISIBLE);
        PropertyValuesHolder scaleXValue = PropertyValuesHolder.ofFloat("rotationX", startX, endX);
        PropertyValuesHolder scaleYValue = PropertyValuesHolder.ofFloat("rotationY", startY, endY);
        ObjectAnimator anim = ObjectAnimator
                .ofPropertyValuesHolder(target, scaleXValue, scaleYValue);
        anim.setDuration(duration);
        anim.start();
    }

    private void frame(ImageView target, int duration, Bitmap[] bitmap) {
        target.setVisibility(View.VISIBLE);
        AnimationDrawable animaton = new AnimationDrawable();
        for (int i = 0; i < bitmap.length; i++) {
            Drawable drawable = new BitmapDrawable(bitmap[i]);
            animaton.addFrame(drawable, duration / bitmap.length);
        }
        target.setImageDrawable(animaton);
        animaton.start();
    }

    private class myTranslateThread implements Runnable {
        private int mStartX;
        private int mStartY;
        private int mEndX;
        private int mEndY;
        private ImageView mTarget;
        private int mDuration;
        private int mLocationX;
        private int mLocationY;
        private Bitmap mBitmap;
        private int mWidth;
        private int mHeight;
        private float mPivotX;
        private float mPivotY;

        public myTranslateThread(int locationX, int locationY, int startX, int startY, int endX, int endY,
                ImageView target, int duration, Bitmap bitmap, int width, int height, float pivotX,
                float pivotY) {
            this.mStartX = startX;
            this.mStartY = startY;
            this.mEndX = endX;
            this.mEndY = endY;
            this.mTarget = target;
            this.mDuration = duration;
            this.mLocationX = locationX;
            this.mLocationY = locationY;
            this.mBitmap = bitmap;
            this.mWidth = width;
            this.mHeight = height;
            this.mPivotX = pivotX;
            this.mPivotY = pivotY;
        }

        @Override
        public void run() {
            //同时执行每一种动画
            translate(mStartX, mStartY, mEndX, mEndY, mTarget, mDuration);
            setImageLocation(mLocationX, mLocationY, mTarget, mBitmap, mWidth, mHeight, mPivotX, mPivotY);
        }
    }

    private class myScaleThread implements Runnable {
        private float mStartX;
        private float mStartY;
        private float mEndX;
        private float mEndY;
        private ImageView mTarget;
        private int mDuration;
        private int mLocationX;
        private int mLocationY;
        private Bitmap mBitmap;
        private int mWidth;
        private int mHeight;
        private float mPivotX;
        private float mPivotY;

        public myScaleThread(int locationX, int locationY, double startX, double endX, double startY,
                double endY, ImageView target, int duration, Bitmap bitmap, int width, int height,
                float pivotX, float pivotY) {
            this.mStartX = (float) startX;
            this.mStartY = (float) startY;
            this.mEndX = (float) endX;
            this.mEndY = (float) endY;
            this.mTarget = target;
            this.mDuration = duration;
            this.mLocationX = locationX;
            this.mLocationY = locationY;
            this.mBitmap = bitmap;
            this.mWidth = width;
            this.mHeight = height;
            this.mPivotX = pivotX;
            this.mPivotY = pivotY;
        }

        @Override
        public void run() {
            //同时执行每一种动画
            scale(mStartX, mEndX, mStartY, mEndY, mTarget, mDuration);
            setImageLocation(mLocationX, mLocationY, mTarget, mBitmap, mWidth, mHeight, mPivotX, mPivotY);
        }
    }

    private class myAlphaThread implements Runnable {
        private float mAlpha1;
        private float mAlpha2;
        private ImageView mTarget;
        private int mDuration;
        private int mLocationX;
        private int mLocationY;
        private Bitmap mBitmap;
        private int mWidth;
        private int mHeight;
        private float mPivotX;
        private float mPivotY;

        public myAlphaThread(int locationX, int locationY, double alpha1, double alpha2, ImageView target,
                int duration, Bitmap bitmap, int width, int height, float pivotX, float pivotY) {
            this.mAlpha1 = (float) alpha1;
            this.mAlpha2 = (float) alpha2;
            this.mTarget = target;
            this.mDuration = duration;
            this.mLocationX = locationX;
            this.mLocationY = locationY;
            this.mBitmap = bitmap;
            this.mWidth = width;
            this.mHeight = height;
            this.mPivotX = pivotX;
            this.mPivotY = pivotY;
        }

        @Override
        public void run() {
            //同时执行每一种动画
            alpha(mAlpha1, mAlpha2, mTarget, mDuration);
            setImageLocation(mLocationX, mLocationY, mTarget, mBitmap, mWidth, mHeight, mPivotX, mPivotY);
        }
    }

    private class myRotationThread implements Runnable {
        private float mStartX;
        private float mEndX;
        private float mStartY;
        private float mEndY;
        private ImageView mTarget;
        private int mDuration;
        private int mLocationX;
        private int mLocationY;
        private Bitmap mBitmap;
        private int mWidth;
        private int mHeight;
        private float mPivotX;
        private float mPivotY;

        public myRotationThread(int locationX, int locationY, double startX, double endX, double startY,
                double endY, ImageView target, int duration, Bitmap bitmap, int width, int height,
                float pivotX, float pivotY) {
            this.mStartX = (float) startX;
            this.mEndX = (float) endX;
            this.mStartY = (float) startY;
            this.mEndY = (float) endY;
            this.mTarget = target;
            this.mDuration = duration;
            this.mLocationX = locationX;
            this.mLocationY = locationY;
            this.mBitmap = bitmap;
            this.mWidth = width;
            this.mHeight = height;
            this.mPivotX = pivotX;
            this.mPivotY = pivotY;
        }

        @Override
        public void run() {
            //同时执行每一种动画
            rotation(mStartX, mEndX, mStartY, mEndY, mTarget, mDuration);
            setImageLocation(mLocationX, mLocationY, mTarget, mBitmap, mWidth, mHeight, mPivotX, mPivotY);
        }
    }

    private class myFrameThread implements Runnable {
        private ImageView mTarget;
        private int mDuration;
        private Bitmap[] mBitmaps;
        private int mLocationX;
        private int mLocationY;
        private Bitmap mBitmap;
        private int mWidth;
        private int mHeight;
        private float mPivotX;
        private float mPivotY;

        public myFrameThread(int locationX, int locationY, ImageView target, int duration, Bitmap[] bitmaps,
                Bitmap bitmap, int width, int height, float pivotX, float pivotY) {
            this.mTarget = target;
            this.mDuration = duration;
            this.mBitmaps = bitmaps;
            this.mLocationX = locationX;
            this.mLocationY = locationY;
            this.mBitmap = bitmap;
            this.mWidth = width;
            this.mHeight = height;
            this.mPivotX = pivotX;
            this.mPivotY = pivotY;
        }

        @Override
        public void run() {
            //同时执行每一种动画
            frame(mTarget, mDuration, mBitmaps);
            setImageLocation(mLocationX, mLocationY, mTarget, mBitmap, mWidth, mHeight, mPivotX, mPivotY);
        }
    }

    private void setImageLocation(int x, int y, ImageView v, Bitmap bitmap, int width, int height,
            float pivotX, float pivotY) {
        //x距离左边的距离百分比
        //y距离上边的距离百分比
        float finalX = ViewUtil.getScreenWidth(getContext()) * x / 100;
        float finalY = ViewUtil.getScreenHeight(getContext()) * y / 100;
        LayoutParams layoutParams = (LayoutParams) v.getLayoutParams();
        layoutParams.topMargin = (int) finalY;
        layoutParams.leftMargin = (int) finalX;
        layoutParams.height = height;
        layoutParams.width = width;
        v.setPivotX(pivotX);
        v.setPivotY(pivotY);
        v.invalidate();
        v.setImageBitmap(bitmap);
    }

    private int percentConvertPx(int x) {
        float finalX = ViewUtil.getScreenWidth(getContext()) * x / 100;
        return (int) finalX;
    }

    private int percentConvertPy(int y) {
        float finalY = ViewUtil.getScreenHeight(getContext()) * y / 100;
        return (int) finalY;
    }

    public void clearView() {
        mParentView.removeAllViews();
    }
}
 
json
{
  "data": [
    {
      "imageName": "img0",
      "width": 35,
      "height": 20,
      "locationX": -10,
      "locationY": 30,
      "animation": [
        {
          "animType": "translate",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 1,
          "duration": 2000,
          "imageNum": 40,
          "startTranslateX": -10,
          "endTranslateX": 20,
          "startTranslateY": 30,
          "endTranslateY": 30,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 1.0,
          "endAlphaA": 0.5,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "translate",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 3000,
          "imageNum": 40,
          "startTranslateX": 20,
          "endTranslateX": 25,
          "startTranslateY": 30,
          "endTranslateY": 30,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 1.0,
          "endAlphaA": 0.5,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "rotation",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 3000,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 1.0,
          "endAlphaA": 0.5,
          "startRotationX": 10.0,
          "endRotationX": 1.0,
          "startRotationY": 1.0,
          "endRotatioonY": 1.0
        },
        {
          "animType": "translate",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 5000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": 25,
          "endTranslateX": 70,
          "startTranslateY": 30,
          "endTranslateY": 30,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 1.0,
          "endAlphaA": 0.5,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        }
      ]
    },
    {
      "imageName": "img1",
      "width": 30,
      "height": 20,
      "locationX": 20,
      "locationY": 30,
      "animation": [
        {
          "animType": "alpha",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 500,
          "imageNum": 40,
          "startTranslateX": -10,
          "endTranslateX": 50,
          "startTranslateY": 30,
          "endTranslateY": 30,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "scale",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 500,
          "imageNum": 40,
          "startTranslateX": -10,
          "endTranslateX": 50,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 0.0,
          "endScaleS": 1.0,
          "startScaleSy": 1.0,
          "endScaleSy": 1.0,
          "startAlphaA": 1.0,
          "endAlphaA": 0.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "alpha",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2100,
          "duration": 500,
          "imageNum": 40,
          "startTranslateX": 9,
          "endTranslateX": 15,
          "startTranslateY": 54,
          "endTranslateY": 54,
          "startScaleS": 0.0,
          "endScaleS": 1.0,
          "startScaleSy": 1.0,
          "endScaleSy": 1.0,
          "startAlphaA": 1.0,
          "endAlphaA": 0.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        }
      ]
    },
    {
      "imageName": "img2",
      "width": 10,
      "height": 30,
      "locationX": 25,
      "locationY": 50,
      "animation": [
        {
          "animType": "alpha",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 5000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": -10,
          "endTranslateX": 50,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "alpha",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 5500,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": -10,
          "endTranslateX": 50,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 1.0,
          "endAlphaA": 0.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "scale",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 5000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": -10,
          "endTranslateX": 50,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 0.0,
          "endScaleS": 5.0,
          "startScaleSy": 1.0,
          "endScaleSy": 5.0,
          "startAlphaA": 1.0,
          "endAlphaA": 0.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        }
      ]
    },
    {
      "imageName": "img3",
      "width": 40,
      "height": 30,
      "locationX": 15,
      "locationY": 50,
      "animation": [
        {
          "animType": "alpha",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 5000,
          "duration": 500,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "scale",
          "pivotX": 1.0,
          "pivotY": 1.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 0.0,
          "endScaleS": 2.0,
          "startScaleSy": 0.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        }
      ]
    },
    {
      "imageName": "img4",
      "width": 40,
      "height": 30,
      "locationX": 15,
      "locationY": 50,
      "animation": [
        {
          "animType": "alpha",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 5000,
          "duration": 500,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "scale",
          "pivotX": 1.0,
          "pivotY": 1.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 5000,
          "duration": 500,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 0.0,
          "endScaleS": 2.0,
          "startScaleSy": 0.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        }
      ]
    },
    {
      "imageName": "img5",
      "width": 40,
      "height": 30,
      "locationX": 10,
      "locationY": 50,
      "animation": [
        {
          "animType": "alpha",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "scale",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        }
      ]
    },
    {
      "imageName": "img6",
      "width": 40,
      "height": 30,
      "locationX": 10,
      "locationY": 50,
      "animation": [
        {
          "animType": "alpha",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "scale",
          "pivotX": 0.0,
          "pivotY": 0.0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        }
      ]
    },
    {
      "imageName": "img7",
      "width": 40,
      "height": 30,
      "locationX": 10,
      "locationY": 50,
      "animation": [
        {
          "animType": "alpha",
          "pivotX": 0,
          "pivotY": 0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        },
        {
          "animType": "scale",
          "pivotX": 0,
          "pivotY": 0,
          "time": 3,
          "order": 3,
          "StartAnimationTime": 2000,
          "duration": 1000,
          "imageNum": 40,
          "startTranslateX": 50,
          "endTranslateX": 60,
          "startTranslateY": 50,
          "endTranslateY": 50,
          "startScaleS": 1.0,
          "endScaleS": 2.0,
          "startScaleSy": 1.0,
          "endScaleSy": 2.0,
          "startAlphaA": 0.0,
          "endAlphaA": 1.0,
          "startRotationX": 1.0,
          "endRotationX": 0.5,
          "startRotationY": 0.5,
          "endRotatioonY": -1.0
        }
      ]
    }
  ]
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值