您的位置:首页 > 移动开发 > Objective-C

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方法,都可以用属性动画来随时间改变其属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息