属性动画

1.动画分为:帧动画,补间动画,属性动画
2.属性动画实现的效果非常相似于我们的补间动画,但事实又不同于我们的补间动画,他和补间动画最大的区别:属性动画真实的改变了控件的属性,而补间动画只是幻影而已,坦白来说就是补间的图片就是不动的,而属性动画则是移动的。
属性动画的定义有两种:1.一种静态的:创建在xml里去创建2.一种动态的:通过java代码去创建
//注意:属性动画是在Android系统3.0以后才出现,所以使用它必须在API高于11的情况下
首先建一个animtor文件夹,在建一个xml,在类里实例化,在开启动画,就是一个静态动画。

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="rotationX"
    android:duration="2000"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:startOffset="0"
    android:valueFrom="360.0"
    >

</objectAnimator>
//静态动画
/*Animator animator = AnimatorInflater.loadAnimator(this, R.animator.objcetanimator);
animator.setTarget(image);
animator.start();*/
动态则是直接创建一个
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) {

        }
    });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值