【Android】Android动画

文章目录

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();
    }
}
相关推荐
双普拉斯1 分钟前
Spring WebFlux调用生成式AI提供的stream流式接口,实现返回实时对话
java·vue.js·人工智能·后端·spring
Mr Aokey4 分钟前
从零开始学RabbitMQ:Java实战简单模式与工作队列消息处理
java·rabbitmq
小葡萄202514 分钟前
JAVA中的抽象类和抽象方法
java·开发语言
Jeremy_Lee12314 分钟前
MySQL 数据导出及备份方法
android
西西学代码1 小时前
安卓开发---写项目的注意事项
android
用户8104661395101 小时前
Java-Scanner类讲解
java
come112341 小时前
深入Spring Boot的核心——配置管理(指南四)
java·spring boot·后端
come112342 小时前
深入分析JAR和WAR包的区别 (指南七)
android·spring boot·后端
用户092 小时前
停止滥用 Dispatchers.IO:Kotlin 协程调度器的深度陷阱与优化实战
android·面试·kotlin
武昌库里写JAVA2 小时前
Java 设计模式在 Spring 框架中的实践:工厂模式与单例模式
java·vue.js·spring boot·sql·学习