Android 动画

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

属性动画: ViewPropertyAnimator

ViewPropertyAnimator  = view.animate() 

示例:

imageView.animate()
            .translationX(200.dp)
            .translationY(200.dp)
            .startDelay = 1000

改变view的属性值,大小 位置 偏移等,限制比较多

ObjectAnimator 

ofFloat(target ,name,values):  

java则需要在view类中声明name值的方法 不然会报错,kotlin则自动生成

kotlin:

 var radius = 50.dp
        set(value) {
            field = value
            invalidate()
        }

java

public void setRadius(float value){

    radius = value;
    invalidate();
}

如果此view改变需要进行invalidate 或者postinvalidate

canvas.withSave{} 保存变更

前后台切换时,每次进入页面可能会被重新绘制,也就是调用onDraw ,需要在应用前 save , 比如
camera.save()

//

camera.restore()

AnimatorSet 可以操作多个属性动画进行合成

示例1:

val animateSet = AnimatorSet()
animateSet.playSequentially(bottomAnima,flipAnima,topAnima)
animateSet.start()
PropertyValuesHolder:将多个属性拼接在一起
示例:


val bottomHolder = PropertyValuesHolder.ofFloat("bottomFlip",60f)

 KeyFrame: 关键帧

用法:

val keyFra = Keyframe.ofFloat(0f,0f)
        val keyFra2 = Keyframe.ofFloat(0.2f,1.5f * LENGTH)
        val keyFra3 = Keyframe.ofFloat(0.8f,0.6f * LENGTH)
        val keyFra4 = Keyframe.ofFloat(1f,1f * LENGTH)

        val keyFrameHolder = PropertyValuesHolder.ofKeyframe("translationX",keyFra,keyFra2,keyFra3,keyFra4)
        val objectAni = ObjectAnimator.ofPropertyValuesHolder(imageView,keyFrameHolder)
        objectAni.startDelay = 1000
        objectAni.duration = 2000
        objectAni.start()

Interpolator 从时间完成度到动画完成度

示例

val objectAni = ObjectAnimator.ofFloat()
objectAni.interpolator = AccelerateInterpolator()

常用差值器:

AccelerateInterpolator 加速差值器

AccelerateDecelerateInterpolator 加减速差值器

LinearInterpolator 匀速差值器

TypeEvaluator:

源码:

/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.animation;

/**
 * This evaluator can be used to perform type interpolation between <code>float</code> values.
 */
public class FloatEvaluator implements TypeEvaluator<Number> {

    /**
     * This function returns the result of linearly interpolating the start and end values, with
     * <code>fraction</code> representing the proportion between the start and end values. The
     * calculation is a simple parametric calculation: <code>result = x0 + t * (x1 - x0)</code>,
     * where <code>x0</code> is <code>startValue</code>, <code>x1</code> is <code>endValue</code>,
     * and <code>t</code> is <code>fraction</code>.
     *
     * @param fraction   The fraction from the starting to the ending values
     * @param startValue The start value; should be of type <code>float</code> or
     *                   <code>Float</code>
     * @param endValue   The end value; should be of type <code>float</code> or <code>Float</code>
     * @return A linear interpolation between the start and end values, given the
     *         <code>fraction</code> parameter.
     */
    public Float evaluate(float fraction, Number startValue, Number endValue) {
        float startFloat = startValue.floatValue();
        return startFloat + fraction * (endValue.floatValue() - startFloat);
    }
}
TypeEvaluator

示例:

class ProVinceEvaluator : TypeEvaluator<String> {
    override fun evaluate(fraction: Float, startValue: String, endValue: String): String {
        val startIndex = proVince.indexOf(startValue)
        val endIndex = proVince.indexOf(endValue)
        val currentIndex = startIndex + ((endIndex - startIndex) * fraction).toInt()
        return proVince[currentIndex]

    }
  val proVinceView = findViewById<ProVince>(R.id.province)
        val animator = ObjectAnimator.ofObject(proVinceView,"current", ProVinceEvaluator(),"台湾省")
        animator.startDelay = 1000
        animator.duration = 10000
        animator.start()

Listeners: 动画监听器

ValueAnimator : 最基本的动画

硬件加速:

软件绘制: CPU------->View

硬件绘制:CPU-------->GPU

硬件加速缺点:兼容性不如软件绘制

离屏缓冲:例如:canvas.savelayer 可以用hard layer代替        ,setLayerType设置View的离屏缓冲

,不可写在onDraw方法中 

setLayerType()

LAYER_TYPE_HARDWARE 开启View离屏缓冲,使用硬件绘制
LAYER_TYPE_SOFTWARE 开启View的离屏缓冲,使用软件绘制
LAYER_TYPE_NONE 不使用离屏缓冲

view.withLayer 硬件绘制    需要开启离屏缓冲  ps:需要view自带的属性才有效果文章来源地址https://www.toymoban.com/news/detail-705252.html

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

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

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

相关文章

  • Android 动画

    属性动画: ViewPropertyAnimator ViewPropertyAnimator  = view.animate()  示例: 改变view的属性值,大小 位置 偏移等,限制比较多 ofFloat(target ,name,values):   java则需要在view类中声明name值的方法 不然会报错,kotlin则自动生成 kotlin: java 如果此view改变需要进行invalidate 或者postinvalidate canvas.with

    2024年02月09日
    浏览(20)
  • android最全的动画讲解

    android的动画一共分为三种,view动画,帧动画,属性动画。 什么是 view动画, 动画的对象只能是view的动画叫做 view动画。 view动画一共分为四种: TranslateAnimation (平移), ScaleAnimation (缩放), RotateAnimation (旋转), AlphaAnimation (透明度)四种动画。还有一个 AnimationSet (组

    2024年02月09日
    浏览(22)
  • Android动画进阶

    在Android中,实现动画的方式通常有两种:视图动画和属性动画。然而这两种方式只能实现一些较为简单动画,仅仅通过改变这些控件属性的方式实现一些复杂的动画效果是比较有难度的,那么我们该如何实现复杂的动画。这里介绍两种实现方式:PathMeasure和SVG。 PathMeasure是

    2023年04月09日
    浏览(35)
  • Android 动画详解

    学习Android必不可少的就是动画的使用了,在Android版本迭代的过程中,出现了很多动画框架,这里做一个总结。 逐帧动画【Frame Animation】,即顺序播放事先准备的图片。 补间动画【Tween Animation】,View的动画效果可以实现简单的平移、缩放、旋转。 属性动画【Property Animation】

    2024年02月14日
    浏览(27)
  • Android - 动画

    官方页面:动画简介 官方页面:属性动画概览 官方页面:使用动画显示或隐藏视图 属性动画 PeopertyAnimation view的属性根据执行的动画发生真实的改变,通过不断设置View的属性实现。 视图动画(补间动画) ViewAnimation(Tween) 视图动画的作用对象是View。不改变view的位置和属

    2024年02月02日
    浏览(24)
  • Android属性动画

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 我们继续总结学习 基础知识 ,温故知新。 属性动画系统是一个强健的框架,用于为几乎任何内容添

    2024年02月04日
    浏览(23)
  • Android远程过渡动画

    Android的系统动画我分为三类:窗口动画,过渡动画,旋转动画。而这篇文章将分析过渡动画。而过渡动画根据创建leash和运行动画是否在同一个进程可以分为本地过渡动画和远程过渡动画,启动远程过渡动画流程相比于其他系统动画的过程,因为涉及到了跨进程,所以涉及到

    2024年01月21日
    浏览(44)
  • android更换开机动画

    android11         路径:device / {vendor-name} / {platform-name} / {device-name} / system / bootanimation.zip         例:android device softwinner ceres ceres-b6 system bootanimation.zip android13         路径:device / softwinner / {PRODUCT} / common / media / bootanimation / bootanimation.zip         例:andr

    2024年02月16日
    浏览(26)
  • android的三种动画

    只能被用来设置View的动画。 可以使用xml或者java 代码进行实现 xml放在 res/anim/ 下 android:duration 动画持续时间,以毫秒为单位 android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态 android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态

    2023年04月11日
    浏览(30)
  • Android开机动画

    android12-release 推荐 Android 12 开机动画代码与流程详解 一般使用 rle格式图片 ;例如放在 splash分区 记录 kernel/drivers/video/msm/msm_fb.c 也是读出根目录下的xx.rle,并显示为开机画面 使用BootAnimation程序显示开机画面,如需修改开机画面,不用修改代码,只需按格式要求做 bootanimati

    2024年02月10日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包