文章目录
1.帧动画
实现人物不停走动
在drawable文件夹中定义drawable_run_anim.xml
csharp
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/run1" android:duration="100"/>
<item android:drawable="@drawable/run2" android:duration="100"/>
<item android:drawable="@drawable/run3" android:duration="100"/>
<item android:drawable="@drawable/run4" android:duration="100"/>
<item android:drawable="@drawable/run5" android:duration="100"/>
<item android:drawable="@drawable/run6" android:duration="100"/>
<item android:drawable="@drawable/run7" android:duration="100"/>
</animation-list>
csharp
public class MainActivity extends AppCompatActivity {
private ImageView my_run_image;
private boolean flag = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
my_run_image = findViewById(R.id.my_run_image);
my_run_image.setImageResource(R.drawable.drawable_run_anim);
AnimationDrawable animationDrawable = (AnimationDrawable) my_run_image.getDrawable();
animationDrawable.setOneShot(false);
my_run_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(flag){
animationDrawable.start();
flag = false;
}else{
animationDrawable.stop();
flag = true;
}
}
});
}
}
2.补间动画
透明度
通过在anim文件夹创建anim_alpha.xml
csharp
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1"
android:toAlpha="0"
android:duration="2000">
</alpha>
csharp
public class TweenAnimAlphaCodeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv_image_alpha = findViewById(R.id.iv_image_alpha);
//Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_alpha);
AlphaAnimation animation = new AlphaAnimation(1f,0f);
animation.setDuration(1000);
iv_image_alpha.setAnimation(animation);
}
}
旋转
通过在anim文件夹创建anim_rotation.xml
pivotX pivotY
代表以什么为中心旋转
csharp
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%">
</rotate>
csharp
public class TweenAnimRotationXmlActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv_image_rotation = findViewById(R.id.iv_image_rotation);
// Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_rotation);
// iv_image_rotation.setAnimation(animation);
RotateAnimation animation = new RotateAnimation(0f,180f,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
animation.setDuration(1000);
iv_image_rotation.setAnimation(animation);
}
}
缩放
通过在anim文件夹创建anim_scale.xml
csharp
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="1.2"
android:toYScale="1.2"
android:pivotX="50%"
android:pivotY="50%">
</scale>
csharp
public class TweenAnimScaleXmlActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv_image_scale = findViewById(R.id.iv_image_scale);
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_scale);
iv_image_scale.setAnimation(animation);
// ScaleAnimation animation = new ScaleAnimation(1f,1.2f,1f,1.2f,
// Animation.RELATIVE_TO_SELF,0.5f,
// Animation.RELATIVE_TO_SELF,0.5f);
}
}
平移
通过在anim文件夹创建anim_translate.xml
csharp
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="400"
android:toYDelta="400"
android:duration="2000">
</translate>
csharp
public class TweenAnimTranslateXmlActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView robotImageView = findViewById(R.id.iv_robot);
// Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_translate);
// robotImageView.startAnimation(animation);
TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f
,Animation.RELATIVE_TO_SELF,0.5f
,Animation.RELATIVE_TO_SELF,0f
,Animation.RELATIVE_TO_SELF,0.5f);
animation.setDuration(1000);
animation.setRepeatCount(2);
animation.setRepeatMode(2);
robotImageView.setAnimation(animation);
}
}
3.属性动画
在res文件夹下创建animator文件夹,创建animator_rotate_x
- rotationX是Android中用于描述对象在X轴上旋转的角度的属性。
csharp
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="rotationX"
android:valueType="floatType"
android:valueFrom="0"
android:valueTo="360"
android:duration="1000"
android:startOffset="1000">
</objectAnimator>
csharp
public class PropertyAnimRotateXmlActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView propertyAnimTv = findViewById(R.id.tv_property);
ObjectAnimator animator = (ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.animator_rotate_x);
animator.setTarget(propertyAnimTv);
animator.start();
// ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(propertyAnimTv, View.ROTATION_X,0f,360f);
// objectAnimator.setDuration(1000);
// objectAnimator.start();
}
}