【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();
    }
}
相关推荐
百锦再6 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
JH30737 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
2501_916008897 小时前
全面介绍Fiddler、Wireshark、HttpWatch、SmartSniff和firebug抓包工具功能与使用
android·ios·小程序·https·uni-app·iphone·webview
Coder_Boy_8 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
玉梅小洋8 小时前
Windows 10 Android 构建配置指南
android·windows
invicinble8 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟8 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖8 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
Libraeking10 小时前
视觉篇:Canvas 自定义绘图与高级动画的华丽圆舞曲
android·经验分享·android jetpack
qq_124987075310 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计