属性动画:可以操作控件的属性(控件一定有该属性的get、set方法才能使用属性动画)
注意:属性动画会改变动画真实的位置(补间动画不会改变动画真实的位置)
效果图:电脑有点卡,大致效果就是这样,下面就直接上代码吧
1.xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="alpha"
android:text="透明" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="rotate"
android:text="旋转" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="translate"
android:text="平移" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="scale"
android:text="缩放" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<ImageView
android:id="@+id/imageView"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:background="@mipmap/a" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<ImageView
android:id="@+id/image_View"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:background="@mipmap/a" />
</LinearLayout>
<Button
android:id="@+id/but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="tog"
android:text="薛之谦" />
</LinearLayout>
2.java代码如下:
public class Activity_Property extends Activity {
ImageView imageView, image_View;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_property);
imageView = (ImageView) findViewById(R.id.imageView);
image_View = (ImageView) findViewById(R.id.image_View);
}
/**
* 透明度
*/
public void alpha(View view) {
ObjectAnimator oa = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0.9f, 0.8f, .07f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f, 0.1f, 0.0f);
oa.setDuration(2000);
oa.start();
}
/**
* 旋转
* rotationX 相对于X轴旋转
* rotationY 相对于Y轴旋转
* rotation 绕平面旋转
*/
public void rotate(View view) {
ObjectAnimator oa = ObjectAnimator.ofFloat(imageView, "rotationY", 0f, 360f);
ObjectAnimator oa1 = ObjectAnimator.ofFloat(image_View, "rotationX", 0f, 360f);
oa.setDuration(2000);
oa1.setDuration(3000);
oa.start();
oa1.start();
}
/**
* 平移
*/
public void translate(View view) {
/**
* 参数一:target 目标
* 参数二:property 属性 控件的属性 ,这里要填写动画具体移动的方向(translationX translationY)
* 参数三:values... (可变参数)值,第一个值是初始位置,后面依次所有的值都是这个图片依次执行的路径
*/
ObjectAnimator oa = ObjectAnimator.ofFloat(imageView, "translationX", 0, 100, 150);
ObjectAnimator oa1 = ObjectAnimator.ofFloat(image_View, "translationY", 0, 125, -50);
oa.setDuration(2000);//设置时间 单位为ms
oa1.setDuration(2000);
oa.start();//开启动画
oa1.start();
}
/**
* 缩放
*/
public void scale(View view) {
ObjectAnimator oa = ObjectAnimator.ofFloat(image_View, "scaleX",1.0f,0.0f,1.0f);
oa.setDuration(2000);
oa.start();
}
/**动画集
* 注意:属性动画集是AnimatorSet
* 补间动画是AnimationSet
* 它们的差别很小,所以在调用的时候要注意,不要调用错了*/
public void tog(View view){
AnimatorSet as=new AnimatorSet();
ObjectAnimator oa2 = ObjectAnimator.ofFloat(imageView, "rotationY", 0f, 360f);//旋转
ObjectAnimator oa1 = ObjectAnimator.ofFloat(imageView, "translationX", 0, 100, 150);//平移
ObjectAnimator oa = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0.9f, 0.8f, .07f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f, 0.1f, 0.0f);//透明度
// as.playTogether(oa2,oa1,oa);//同时执行
// as.playSequentially(oa2,oa1,oa);//依次执行
/**play() 执行
* with() 和xx一起执行
* after() 在XX之后执行*/
as.play(oa).with(oa2).after(oa1);
as.setTarget(imageView);
as.setDuration(6000);
as.start();
}
}
ObjectAnimator:
• 参数一:指定这个动画要操作的是哪个控件
• 参数二:指定这个动画要操作这个控件的哪个属性
• 参数三:是可变长参数,指这个属性值是从哪变到哪。下面我们再来看一下如何实现旋转效果:
• ObjectAnimatoranimator = ObjectAnimator.ofFloat(tv,"rotation",0,180,0);
• animator.setDuration(2000); //设置时间,单位为ms
• animator.start();//开始动画