ObjectAnimator能力探究
2014-07-28 09:33
253 查看
自Android3.0以来,推出了属性动画的动画机制,遍览众多安卓教材,大多对动画机制重点讲解还集中在帧动画和补间动画上,对属性动画要么没提要么简单带过。其实据本人应用发现,属性动画不仅可以实现帧动画和补间动画,还可以实现非view对象的动画。下面是写的三种实现的demo,布局如下——
点击旋转会旋转最上面的textview,点击图片会播放小狗的动画,点击Button会改变自定义的抽象类的属性。
对应的代码如下:public class AnimatorDemo extends Activity {
TextView textView;
ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
textView=(TextView) findViewById(R.id.textView1);
img=(ImageView) findViewById(R.id.imageView1);
}
public void swirl(View v){
ObjectAnimator objAnimator=ObjectAnimator.ofFloat(textView, "rotation", 0,360);
objAnimator.setDuration(2000);
objAnimator.setRepeatCount(10);
objAnimator.setInterpolator(new LinearInterpolator());
objAnimator.start();
}
public void frame(View v){
ObjectAnimator objectAnimator=ObjectAnimator.ofInt(img, "imageResource", R.drawable.img1,R.drawable.img13);
objectAnimator.setDuration(1500);
objectAnimator.setRepeatCount(ObjectAnimator.INFINITE);
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.start();
}
public void fall(View v){
final Ball ball=new Ball();
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(ball, "speed", 0,10,0);
objectAnimator.setDuration(2000);
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.start();
new Thread(){
public void run() {
try {
for(int i=0;i<30;i++){
Thread.sleep(100);
Log.d("speed of ball", String.valueOf(ball.getSpeed()));
}
} catch (InterruptedException e) {
Log.e("interupted", e.getLocalizedMessage());
}
};
}.start();
}
}第三个方法中用到的实体类代码极其简单,一个属性一对set和get方法而已
public class Ball {
private float speed;
public float getSpeed() {
return speed;
}
public void setSpeed(float speed) {
this.speed = speed;
}
}第三个抽象动画的log结果:
如此可见,属性动画抽象出的本质是随着时间改变对象属性。所以只要提供一个对象一对get和set方法,都可以用属性动画来随时间改变其属性。
点击旋转会旋转最上面的textview,点击图片会播放小狗的动画,点击Button会改变自定义的抽象类的属性。
对应的代码如下:public class AnimatorDemo extends Activity {
TextView textView;
ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
textView=(TextView) findViewById(R.id.textView1);
img=(ImageView) findViewById(R.id.imageView1);
}
public void swirl(View v){
ObjectAnimator objAnimator=ObjectAnimator.ofFloat(textView, "rotation", 0,360);
objAnimator.setDuration(2000);
objAnimator.setRepeatCount(10);
objAnimator.setInterpolator(new LinearInterpolator());
objAnimator.start();
}
public void frame(View v){
ObjectAnimator objectAnimator=ObjectAnimator.ofInt(img, "imageResource", R.drawable.img1,R.drawable.img13);
objectAnimator.setDuration(1500);
objectAnimator.setRepeatCount(ObjectAnimator.INFINITE);
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.start();
}
public void fall(View v){
final Ball ball=new Ball();
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(ball, "speed", 0,10,0);
objectAnimator.setDuration(2000);
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.start();
new Thread(){
public void run() {
try {
for(int i=0;i<30;i++){
Thread.sleep(100);
Log.d("speed of ball", String.valueOf(ball.getSpeed()));
}
} catch (InterruptedException e) {
Log.e("interupted", e.getLocalizedMessage());
}
};
}.start();
}
}第三个方法中用到的实体类代码极其简单,一个属性一对set和get方法而已
public class Ball {
private float speed;
public float getSpeed() {
return speed;
}
public void setSpeed(float speed) {
this.speed = speed;
}
}第三个抽象动画的log结果:
如此可见,属性动画抽象出的本质是随着时间改变对象属性。所以只要提供一个对象一对get和set方法,都可以用属性动画来随时间改变其属性。
相关文章推荐
- Android Fragment报错:java.lang.RuntimeException: Unknown animation name: objectAnimator
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- android ObjectAnimator基本应用
- ObjectAnimator旋转动画
- Android-Animator属性动画( ObjectAnimator , AnimatorSet , ValueAnimator )
- (二)属性动画一重境界之ObjectAnimator
- 属性动画ObjectAnimator
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- ObjectAnimator设置动画
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- android 属性动画之 ObjectAnimator
- 安卓属性动画ValueAnimator与ObjectAnimator详解
- android 属性动画之 ObjectAnimator
- 第三方登录、动态的加载提示和点击效果、属性动画ObjectAnimator心得
- <Android 基础(三十一)> ObjectAnimator
- AnimatorSet和ObjectAnimator、PropertyValuesHolder参数详解
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- ObjectAnimator 动画小技巧
- (4.1.23.9)自定义控件三部曲之动画篇(七)——ObjectAnimator基本使用
- ObjectAnimator ValueAnimator AnimatorSet基础