【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();
    }
}
相关推荐
是小崔啊10 分钟前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
黄公子学安全19 分钟前
Java的基础概念(一)
java·开发语言·python
liwulin050620 分钟前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc24 分钟前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Yuan_o_25 分钟前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
Oneforlove_twoforjob29 分钟前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言
数据小小爬虫1 小时前
利用Java爬虫获取苏宁易购商品详情
java·开发语言·爬虫
小汤猿人类1 小时前
nacos-服务发现注册
java·开发语言·服务发现
码农爱java1 小时前
设计模式--抽象工厂模式【创建型模式】
java·设计模式·面试·抽象工厂模式·原理·23种设计模式·java 设计模式
2401_854391081 小时前
SSM 架构中 JAVA 网络直播带货查询系统设计与 JSP 有效实现方法
java·开发语言·架构