1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package com.example.animation; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View view){ Toast.makeText( this , "click" , Toast.LENGTH_SHORT).show(); } public void move(View view ){ float fromXDelta= 0 ; float toXDelta= 0 ; float fromYDelta= 0 ; float toYDelta= 200 ; TranslateAnimation animation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta); /** * time */ animation.setDuration( 1000 ); animation.setFillAfter( true ); ImageView imageView=(ImageView)findViewById(R.id.imageView); imageView.startAnimation(animation); } } |
这是一般动画,再看属性动画
区别:一般动画变换后只是图片移动了,view的位置不变,然而属性动画view随着图片移动。
1
2
3
4
5
|
public void move(View view ){ ImageView imageView=(ImageView)findViewById(R.id.imageView); ObjectAnimator.ofFloat(imageView, "translationY" , 0f,200f).setDuration( 1000 ).start(); } |
多种动画同时进行
1
2
3
4
5
6
7
|
public void move(View view ){ ImageView imageView=(ImageView)findViewById(R.id.imageView); ObjectAnimator.ofFloat(imageView, "translationY" , 0f,200f).setDuration( 1000 ).start(); ObjectAnimator.ofFloat(imageView, "translationX" , 0f,200f).setDuration( 1000 ).start(); ObjectAnimator.ofFloat(imageView, "rotation" , 0 ,360f).setDuration( 1000 ).start(); } |
Google提供了一种更节省系统资源的多种动画同时播放
1
2
3
4
5
6
7
8
9
|
public void move(View view ){ ImageView imageView=(ImageView)findViewById(R.id.imageView); PropertyValuesHolder p1=PropertyValuesHolder.ofFloat( "rotation" , 0 ,360f); PropertyValuesHolder p2=PropertyValuesHolder.ofFloat( "translationX" , 0f,200f); PropertyValuesHolder p3=PropertyValuesHolder.ofFloat( "translationY" , 0f,200f); ObjectAnimator.ofPropertyValuesHolder(imageView, p1,p2,p3).setDuration( 1000 ).start(); } |
同时Google提供了animatorset,允许多种不同动画按照用户要求播放,如使用set.palyTpgether() set.playSequentially()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public void move(View view ){ ImageView imageView=(ImageView)findViewById(R.id.imageView); ObjectAnimator animator1=ObjectAnimator.ofFloat(imageView, "rotation" , 0 ,360f); ObjectAnimator animator2=ObjectAnimator.ofFloat(imageView, "translationX" , 0 ,200f); ObjectAnimator animator3=ObjectAnimator.ofFloat(imageView, "translationY" , 0 ,200f); AnimatorSet set= new AnimatorSet(); //set.playTogether(animator1,animator2,animator3); set.playSequentially(animator1,animator2,animator3); set.setDuration( 1000 ); set.start(); } |
结伴旅游,一个免费的交友网站:www.jieberu.com
推推族,免费得门票,游景区:www.tuituizu.com