android视图动画(ViewAnimation动画)

这篇具有很好参考价值的文章主要介绍了android视图动画(ViewAnimation动画)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、xml定义

通过xml文件资源定义好,然后用工具函数加载,并给对应的view设置该动画,调用startAnimation方法开启动画效果

androidStudio新建xml动画资源

android视图动画(ViewAnimation动画)

android视图动画(ViewAnimation动画)

二、java实现动画

使用java对象来new一个动画对象,然后设置相关属性,调用该对象实例的startAnimation方法来开启动画效果

三、两种方式的对比

Xml文件定义View动画属性

通过xml来定义View动画涉及到一些公有的属性(在AndroidStudio上不能提示):

android:duration     动画持续时间

android:fillAfter    为true动画结束时,View将保持动画结束时的状态

android:fillBefore   为true动画结束时,View将还原到开始开始时的状态

android:repeatCount  动画重复执行的次数,默认为0,必须是int,可以为-1表示不停止

android:repeatMode   动画重复模式 ,重复播放时restart重头开始,reverse重复播放时倒叙回放,该属性需要和android:repeatCount一起使用

android:interpolator 插值器,相当于变速器,改变动画的不同阶段的执行速度

        这些属性是从Animation中继承下来的,在alpha、rotate、scale、translate标签中都可以直接使用。

java定义view动画属性

RotateAnimation rotate  = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

LinearInterpolator lin = new LinearInterpolator();    

rotate.setInterpolator(lin);  

 rotate.setDuration(1500);//设置动画持续时间   

 rotate.setRepeatCount(-1);//设置重复次数   

rotate.setFillAfter(true);//动画执行完后是否停留在执行完的状态   

 rotate.setStartOffset(10);//执行前的等待时间

Java还有很多set属性的方法,跟XML中的属性一一对应,有兴趣的可以自己去尝试一下

代码片段

下面的xml属性和java代码的属性设置不一定一致,请细心对比查看

渐变xml:

<?xml version="1.0" encoding="utf-8"?>

<alpha xmlns:android="http://schemas.android.com/apk/res/android"

       android:duration="2000"

       android:fromAlpha="1.0"

       android:toAlpha="0">

</alpha>

渐变java:

public void clickToAlpha(View view) {

    AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);

    alphaAnimation.setDuration(2000);

    mTargetView.startAnimation(alphaAnimation);

}

旋转xml:

<?xml version="1.0" encoding="utf-8"?>

<rotate xmlns:android="http://schemas.android.com/apk/res/android"

        android:duration="2000"

        android:fillAfter="true"

        android:fromDegrees="0"

        android:pivotX="50%"

        android:pivotY="50%"

        android:toDegrees="360">

</rotate>

旋转java:

public void clickToRotate(View view) {

    RotateAnimation rotateAnimation = new RotateAnimation(

            0, 360,

            Animation.RELATIVE_TO_SELF, 0.5f,

            Animation.RELATIVE_TO_SELF, 0.5f);

    rotateAnimation.setDuration(2000);

    mTargetView.startAnimation(rotateAnimation);

}

缩放xml

<?xml version="1.0" encoding="utf-8"?>

<scale xmlns:android="http://schemas.android.com/apk/res/android"

       android:duration="2000"

       android:fromXScale="1.0"

       android:fromYScale="1.0"

       android:pivotX="50%"

       android:pivotY="50%"

       android:toXScale="0.5"

       android:toYScale="0.5">

</scale>

缩放java:

public void clickToScale(View view) {

    ScaleAnimation scaleAnimation = new ScaleAnimation(

            1, 0.5f,

            1, 0.5f,

            Animation.RELATIVE_TO_SELF, 0.5f,

            Animation.RELATIVE_TO_SELF, 0.5f);

    scaleAnimation.setDuration(2000);

    mTargetView.startAnimation(scaleAnimation);

}

平移xml:

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

           android:duration="2000"

           android:fromXDelta="0"

           android:fromYDelta="0"

           android:toXDelta="100%"

           android:toYDelta="100%">

</translate>

平移java:

public void clickToTranslate(View view) {

    TranslateAnimation translateAnimation = new TranslateAnimation(

            Animation.RELATIVE_TO_SELF, 0,

            Animation.RELATIVE_TO_SELF, 1,

            Animation.RELATIVE_TO_SELF, 0,

            Animation.RELATIVE_TO_SELF, 1);

    translateAnimation.setDuration(2000);

    mTargetView.startAnimation(translateAnimation);

}

xml动画使用

Xml定义后,其实还是需要在java代码里面使用的,例如上面的xml时候时候的代码如下:

public void clickToAlpha(View view) {

    Animation alphaAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_anim_alpha);

    mTargetView.startAnimation(alphaAnim);

}



public void clickToRotate(View view) {

    Animation rotateAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_anim_rotate);

    mTargetView.startAnimation(rotateAnim);

}



public void clickToScale(View view) {

    Animation scaleAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_anim_scale);

    mTargetView.startAnimation(scaleAnim);

}



public void clickToTranslate(View view) {

    Animation translateAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_anim_translate);

    mTargetView.startAnimation(translateAnim);

}



public void clickToSet(View view) {

    Animation setAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_anim_set);

    mTargetView.startAnimation(setAnim);

}

监听动画事件

不管xml还是java定义动画都可以使用动画监听

animation.setAnimationListener(new Animation.AnimationListener() {

    @Override

    public void onAnimationStart(Animation animation) {

        // 动画开始

    }



    @Override

    public void onAnimationEnd(Animation animation) {

        // 动画结束

    }



    @Override

    public void onAnimationRepeat(Animation animation) {

        //动画重复

    }

});

Java代码时候动画的构造函数属性

例如RotateAnimation的构造函数有非常多的属性他们分别代表什么呢,我们去查阅文档

https://developer.android.com/reference/android/view/animation/RotateAnimation#RotateAnimation(float,%20float,%20int,%20float,%20int,%20float)

发现这个对象有四个构造函数

  • public RotateAnimation (Context context,  AttributeSet attrs)
  • public RotateAnimation (float fromDegrees, float toDegrees)
  • public RotateAnimation (float fromDegrees,  float toDegrees,  float pivotX,  float pivotY)
  • public RotateAnimation (float fromDegrees,  float toDegrees,  int pivotXType,  float pivotXValue, int pivotYType, float pivotYValue)

根据形参,可以发现是可以xml的属性几乎是一一对应的,只是java构造函数提供多种可选配置

对应的参数也有说明,其实xml这些属性也是一样如此

android视图动画(ViewAnimation动画)

这里面大部分参数已经在上面介绍过了

重点说下pivotXType与pivotYType

pivotXValue

int pivotXType,  动画在X轴相对于物件位置类型,与下面的pivotXValue结合,确定X轴上旋转中心。

可能值为:Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_PARENT

如果pivotXType=Animation.ABSOLUTE,则此参数为旋转中心在屏幕上X轴的值;

如果pivotXType=Animation.RELATIVE_TO_PARENT,则参数pivotXValue为旋转中心在父控件水平位置百分比,如0.5表示在父控件水平方向中间位置;
如果pivotXType=Animation.RELATIVE_TO_SELF,则参数pivotXValue为旋转中心在控件自身水平位置百分比,如果X和Y的Value都设置为0.5,则该控件以自身中心旋转。

四、组合动画

1、java

public void clickToSet(View view) {

    AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);

    alphaAnimation.setDuration(2000);



    RotateAnimation rotateAnimation = new RotateAnimation(

            0, 360,

            Animation.RELATIVE_TO_SELF, 0.5f,

            Animation.RELATIVE_TO_SELF, 0.5f);

    rotateAnimation.setDuration(2000);



    ScaleAnimation scaleAnimation = new ScaleAnimation(

            1, 0.5f,

            1, 0.5f,

            Animation.RELATIVE_TO_SELF, 0.5f,

            Animation.RELATIVE_TO_SELF, 0.5f);

    scaleAnimation.setDuration(2000);



    TranslateAnimation translateAnimation = new TranslateAnimation(

            Animation.RELATIVE_TO_SELF, 0,

            Animation.RELATIVE_TO_SELF, 1,

            Animation.RELATIVE_TO_SELF, 0,

            Animation.RELATIVE_TO_SELF, 1);

    translateAnimation.setDuration(2000);



    AnimationSet animationSet = new AnimationSet(true);

    animationSet.addAnimation(alphaAnimation);

    animationSet.addAnimation(rotateAnimation);

    animationSet.addAnimation(scaleAnimation);

    animationSet.addAnimation(translateAnimation);



    mTargetView.startAnimation(animationSet);

}

2.xml

<?xml version="1.0" encoding="utf-8"?>

<set

    android:fillAfter="true"

    android:duration="3000"

    android:shareInterpolator="@android:anim/accelerate_decelerate_interpolator"

    xmlns:android="http://schemas.android.com/apk/res/android">

    <!--透明度从无到有-->

    <alpha android:fromAlpha="0"

        android:toAlpha="1"/>



    <!--旋转两圈-->

    <rotate

        android:pivotY="50%"

        android:pivotX="50%"

        android:fromDegrees="0"

        android:toDegrees="720"/>



    <!--放大三倍-->

    <scale android:pivotX="50%"

        android:pivotY="50%"

        android:fromXScale="0.1"

        android:fromYScale="0.1"

        android:toXScale="3"

        android:toYScale="3"/>



    <!--平移至中间位置-->

    <translate

        android:fromXDelta="0"

        android:fromYDelta="0"

        android:toXDelta="35%p"

        android:toYDelta="42.5%p"/>



</set>


 文章来源地址https://www.toymoban.com/news/detail-409045.html

  //1.通过xml方式引入动画

       Animation animationSet = AnimationUtils.loadAnimation(this,R.anim.anim_set_pic);

        //设置动画时长为3秒

        animationSet.setDuration(3000);

        //设置插值器为先加速再减速

        animationSet.setInterpolator(new AccelerateDecelerateInterpolator());

        //动画完成后保持位置

        animationSet.setFillAfter(true);

        //开始动画

        ibSagiri.startAnimation(animationSet);

到了这里,关于android视图动画(ViewAnimation动画)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 蓝牙通信(通过 BluetoothSocket 传输文件/文本)

    前言 :Android 蓝牙通信,通过BluetoothSocket方式建立长连接并传输文本或文件。前段时间有个项目的功能需求是:AR眼镜通过蓝牙的方式连接北斗设备,当北斗设备收到文本/语音/图片消息时转发到AR眼镜上,AR眼镜也可以发送文本/语音/图片数据到北斗设备上并转发到指定的目标

    2024年04月14日
    浏览(46)
  • Android apk文件打包自定义命名

    前言 在Android Studio中打包生成的APK和aar文件基本上都是module名称+构建类型,常见的都是 app-debug.apk 和 app-release.apk 这种样式的。 显然没有版本号等序号标识的话,管理起来会比较混乱,基于此种情况,我们可以通过修改 build.gradle 文件中的配置来修改生成包的文件名以做区分

    2024年02月13日
    浏览(57)
  • 蓝牙通信 Android开发实现手机间通过蓝牙传输文件

    MainActivity.java 根据以上代码的结构和功能,我会将它们分为以下几部分: 权限请求和检查 requestPermissions() 方法 checkLocationPermission() 方法 onRequestPermissionsResult() 方法 初始化和设置 onCreate() 方法 onStart() 方法 onActivityResult() 方法 蓝牙设备搜索和配对 discoverDevices() 方法 与列表交互

    2024年03月27日
    浏览(51)
  • java minio通过getPresignedObjectUrl设置(自定义)预签名URL下载文件的响应文件名之minio源码改造方案

    用户上传文件到Minio时,一般存储在Minio中的对象名称都是后端以UUID或者其他随机或非随机方案生成的唯一标识做为文件名,这个对象名称一般都不会是用户上传时的原文件名称。 在用户下载时,想让文件流不通过后端服务器,而是用户直接申请并使用某个要下载对象的Min

    2024年01月25日
    浏览(64)
  • SpringMVC自定义视图完成步骤 和 视图解析的源码剖析

    自定义视图完成步骤: ● 7.2.1自定义视图完成步骤 1. 自定义视图* *:** 创建一个 View 的 bean, 该 bean 需要继承自 AbstractView, 并实现 renderMergedOutputModel 方法* *.** 2. 并把自定义 View 加入到 IOC 容器中 3. 自定义视图的视图处理器,使用 BeanNameViewResolver* *, 这个视图处理器也需要配置

    2024年02月09日
    浏览(41)
  • CustomTabBar 自定义选项卡视图

    1. 用到的技术点   1) Generics      泛型   2) ViewBuilder   视图构造器   3) PreferenceKey 偏好设置   4) MatchedGeometryEffect 几何效果 2. 创建枚举选项卡项散列,TabBarItem.swift 3. 创建选项卡偏好设置 TabBarItemsPreferenceKey.swift 4. 创建自定义选项卡视图 CustomTabBarView.swift 5. 创建自定义选项卡

    2024年02月06日
    浏览(101)
  • Android -- 下拉列表、列表视图、网格视图

    Spinner 用于从一串列表中选择某项,功能类似于单选按钮的组合 下拉列表的展示 方式有两种,一种是在当前下拉框的正下方弹出列表框,此时要把spinnerMode属性设置为 dropdown,另一种是在页面中部弹出列表对话框,此时要把spinnerMode属性设置为dialog。 dropdown 下拉模式       

    2023年04月08日
    浏览(43)
  • UE4/5动画系列(3.通过后期处理动画蓝图的头部朝向Actor,两种方法:1.通过动画层接口的look at方法。2.通过control rig的方法)

    目录 蓝图 点积dot Yaw判断  后期处理动画蓝图  动画层接口 ControlRig: 首先我们创建一个actor类,这个actor类是我们要看的东西,actor在哪,我们的动物就要看到哪里(同样,这个我们也是做一个父类,因为它会和我们的蓝图类模板一起使用)。 这样子做,将模型作为根(也可

    2024年02月11日
    浏览(64)
  • 【论文阅读】通过对比聚类分配的深度多视图聚类

    原文链接 对于大多数现有的深度MVC方法, 探索多视图的不变表示 仍然是一个棘手的问题。在本文中,提出了一种 跨视图对比学习(CVCL)方法 ,该方法学习视图不变表示,并通过比较多个视图之间的聚类分配来产生聚类结果。 具体来说,首先在预训练阶段使用深度自编码器提

    2024年02月21日
    浏览(48)
  • Vue中如何进行自定义动画与动画效果设计

    在Vue中,动画效果是非常有用的,它可以使用户界面变得更加生动、有趣,从而提高用户体验。Vue提供了一套非常方便的动画系统,使得我们可以非常容易地实现动画效果。 在本文中,我们将学习如何在Vue中进行自定义动画与动画效果设计。我们将探讨使用CSS动画和Web动画实

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包