这是一个简单的属性动画
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) {
}
});