Android开发之View动画

简介: Android动画主要分为3种View动画帧动画属性动画何为View动画?View动画主要是对View对象进行变换所达到的动画效果,如平移、缩放、旋转和透明度等,下面写个简单案例。
Android动画主要分为3种
  • View动画
  • 帧动画
  • 属性动画
何为View动画?

View动画主要是对View对象进行变换所达到的动画效果,如平移、缩放、旋转和透明度等,下面写个简单案例。

动画文件

首先在res目录下新建一个anim文件夹,然后新建4个动画文件,如下:


img_63163178a494f15a7ffdd824f4f23ecd.png
动画文件.PNG

然后在Activity布局中放入一张图片:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/football"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/football" />
</RelativeLayout>
Activity
    private ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img = (ImageView) findViewById(R.id.football);

    }
1、平移动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="3000" 
        android:fromXDelta="0"  //x的起始值
        android:fromYDelta="0"  //y的起始值
        android:toXDelta="400" //x的结束值
        android:toYDelta="400" /> //y的结束值

</set>

android:fromXDelta:x的起始值
android:toXDelta:x的结束值
android:fromYDelta:y的起始值
android:toYDelta:y的结束值

Activity代码

private void translateAnim() {
        Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.translateanim);
        img.startAnimation(animation);
    }

测试运行

img_03757c72c9c5431ab7d2b314eff0056a.gif
translate.gif
2、缩放动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <scale
        android:duration="3000"
        android:fromXScale="0.5"
        android:fromYScale="0.5"
        android:toXScale="1.0"
        android:toYScale="1.0" />

</set>

android:fromXScale:水平方向缩放的起始值
android:toXScale:水平方向缩放的结束值
android:fromYScale:垂直方向缩放的起始值
android:toYScale:垂直方向缩放的结束值

Activity代码

private void scaleAnim() {
        Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.scaleanim);
        img.startAnimation(animation);
    }

测试运行

img_8ba91f1b442270750306f173de01d48f.gif
scale.gif
3、旋转动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <rotate
        android:duration="3000"
        android:fromDegrees="0"
        android:toDegrees="360" />


</set>

android:fromDegrees:旋转开始的角度
android:toDegrees:旋转结束的角度

Activity代码

private void roteteAnim() {
        Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotateanim);
        img.startAnimation(animation);
    }

测试运行

img_d91a3b13fe37ff0c88ebeb7b21701375.gif
rotate.gif
4、透明度动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <alpha
        android:duration="3000"
        android:fromAlpha="1.0"
        android:toAlpha="0.1" />

</set>

android:fromAlpha:起始透明度
android:toAlpha:结束透明度

Activity代码

private void alphaAnim() {
        Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alphaanim);
        img.startAnimation(animation);
    }

测试运行

img_c4ecc45c701f8a23b088af37eb3f01ce.gif
alpha.gif
注意点

1、动画集合 <set xmlns:android="http://schemas.android.com/apk/res/android">
中可以设置一些属性值,重要属性说明:

  • android:interpolator:动画集合插值器,主要影响动画的速度,默认为加速减速插值器,还有线性插值器、减速插值器等等
  • android:shareInterpolator:动画集合中的动画是否与几何共享同一个插值器
  • android:duration:动画集合执行时间
  • android:fillAfter:动画结束以后View是否停在结束位置,默认是false不停留,但是该属性需要设置在动画集合中才有效果,设在单独的动画中是无效的

2、View动画并没有真正改变View的位置,也就是说就算你看到了动画最终停留在了某个位置,它的真身还是在原来的位置,有点像神话小说的元神出窍,所以使用的时候要特别注意,如给Button设置点击事件,就会发现新位置的Button并不会出发click事件,原始位置却能响应,不知道原因的同学肯定入坑~~

目录
相关文章
|
3月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
358 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
362 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
806 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
624 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
3月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
207 0
|
4月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
291 6
|
8月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
395 65
Android自定义view之网易云推荐歌单界面
|
8月前
|
Android开发 开发者
Android SVG动画详细例子
本文详细讲解了在Android中利用SVG实现动画效果的方法,通过具体例子帮助开发者更好地理解和应用SVG动画。文章首先展示了动画的实现效果,接着回顾了之前的文章链接及常见问题(如属性名大小写错误)。核心内容包括:1) 使用阿里图库获取SVG图形;2) 借助工具将SVG转换为VectorDrawable;3) 为每个路径添加动画绑定属性;4) 创建动画文件并关联SVG;5) 在ImageView中引用动画文件;6) 在Activity中启动动画。文末还提供了完整的代码示例和源码下载链接,方便读者实践操作。
398 65
|
6月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
449 11
|
6月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
278 0