【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();
    }
}
相关推荐
以后不吃煲仔饭4 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师4 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
The_Ticker10 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
大数据编程之光32 分钟前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
诸神黄昏EX37 分钟前
Android 分区相关介绍
android
爪哇学长1 小时前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
ExiFengs1 小时前
实际项目Java1.8流处理, Optional常见用法
java·开发语言·spring
paj1234567891 小时前
JDK1.8新增特性
java·开发语言
繁依Fanyi1 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
慧都小妮子1 小时前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net