属性动画

这是一个简单的属性动画

1.属性动画实现的效果非常相似于我们的补间动画,但事实又不同于我们的补间动画,他和补间动画最大的区别:属性动画真实的改变了控件的属性,而补间动画只是幻影而已,坦白来说就是补间的图片就是不动的,而属性动画则是移动的。

属性动画的定义有两种:1.一种静态的:创建在xml里去创建2.一种动态的:通过java代码去创建

case R.id.alpha_bt:

        //做透明动画

        ObjectAnimator alpha = ObjectAnimator.ofFloat(image, "alpha", new float[]{0.2f, 0.4f, 0.6f, 0.8f, 1.0f});

        //设置动画时间

        alpha.setDuration(4000);

        //设置动画的模式

        alpha.setRepeatMode(ObjectAnimator.RESTART);

        //设置动画的执行次数

        alpha.setRepeatCount(0);

        //使用objectAnimator开启动画

        alpha.start();

        break;

    case R.id.translationY_bt:

        //做平移动画

        ObjectAnimator translationY = ObjectAnimator.ofFloat(image, "translationY", new float[]{20f, 40f, 60f, 80f,120f});

        //设置动画时间

        translationY.setDuration(4000);

        //设置动画的模式

        translationY.setRepeatMode(ObjectAnimator.REVERSE);

        //设置执行次数

        translationY.setRepeatCount(0);

        //开启动画

        translationY.start();

        break;

    case R.id.scaleX_bt:

        //做缩放动画

        ObjectAnimator scale = ObjectAnimator.ofFloat(image, "scaleX", new float[]{1f, 2f, 3f, 4f,5f,6f,1f});

        //设置动画时间

        scale.setDuration(4000);

        //设置动画的模式

        scale.setRepeatMode(ObjectAnimator.REVERSE);

        //设置执行次数

        scale.setRepeatCount(0);

        //开启动画

        scale.start();

        break;

    case R.id.rotationY_bt:

        //做旋转动画

        ObjectAnimator rotationY = ObjectAnimator.ofFloat(image, "rotationY", new float[]{90f, 160f, 270f, 360f});

        //设置动画时间

        rotationY.setDuration(4000);

        //设置动画的模式

        rotationY.setRepeatMode(ObjectAnimator.REVERSE);

        //设置执行次数

        rotationY.setRepeatCount(0);

        //开启动画

        rotationY.start();

        break;

    case R.id.AnimatorSet_bt:

        AnimatorSet set = new AnimatorSet();

        ObjectAnimator scale1 = ObjectAnimator.ofFloat(image, "scaleX", new float[]{1f, 2f, 3f, 4f,5f,6f,1f});

        scale1.setDuration(4000);

        ObjectAnimator alpha1 = ObjectAnimator.ofFloat(image, "alpha", new float[]{0.2f, 0.4f, 0.6f, 0.8f, 1.0f});

        alpha1.setDuration(4000);

        set.playTogether(scale1,alpha1);

        set.start();

        break;

    case R.id.image:

        Toast.makeText(MainActivity.this,"点啦图片",Toast.LENGTH_SHORT).show();

        break;

}

public void saymit(View view) {

    WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);

    DisplayMetrics dm = new DisplayMetrics();

    wm.getDefaultDisplay().getMetrics(dm);

    int width = dm.widthPixels;        // 屏幕宽度(像素)

    int height = dm.heightPixels;      // 屏幕高度(像素)

    float density = dm.density;        // 屏幕密度(0.75 / 1.0 / 1.5)

    int densityDpi = dm.densityDpi;    // 屏幕密度dpi(120 / 160 / 240)

    // 屏幕宽度算法:屏幕宽度(像素)/屏幕密度

    float screenWidth =  (width / density);  // 屏幕宽度(dp)

    float screenHeight =  (height / density);// 屏幕高度(dp)

    ObjectAnimator translationY = ObjectAnimator.ofFloat(heart, "translationY", new float[]{0f,screenHeight});

    translationY.setDuration(5000);

    translationY.start();

    ObjectAnimator translationX = ObjectAnimator.ofFloat(heart, "translationX", new float[]{0f,-screenWidth});

    translationX.setDuration(5000);

    translationX.start();

    ObjectAnimator alpha = ObjectAnimator.ofFloat(heart, "alpha", new float[]{1.0f, 0.8f, 0.6f, 0.2f, 0f});

    alpha.setDuration(5000);

    alpha.start();

    translationY.addListener(new Animator.AnimatorListener() {

        @Override

        public void onAnimationStart(Animator animator) {

        }

        @Override

        public void onAnimationEnd(Animator animator) {

            heart1.setVisibility(View.VISIBLE);

        }

        @Override

        public void onAnimationCancel(Animator animator) {

        }

        @Override

        public void onAnimationRepeat(Animator animator) {

        }

    });

你可能感兴趣的:(属性动画)