因为最近在学习自定义view,所以开始也对动画需要了解下,废话不多说。

动画分为视图动画和属性动画,视图动画需要设计提供图片才可以完成,所以限制性较大,但是属性动画就可以对控件进行属性控制,可以实现更多的效果

视图动画就相对来说比较简单:

1 在drawable创建xml文件

android:drawable需要放入图片的资源,而android:duration设置动画效果的时间,实现代码如下:

class FramAnimationActivity : AppCompatActivity() {

private lateinit var mAnimationDrawable: AnimationDrawable

private lateinit var vAnimationDrawable: View

private lateinit var btnStart: Button

private lateinit var btnStop: Button

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_fram_animation)

vAnimationDrawable=findViewById(R.id.v_animation)

btnStart=findViewById(R.id.start)

btnStop=findViewById(R.id.stop)

mAnimationDrawable=vAnimationDrawable.background as AnimationDrawable

//使动画只演示一次

// mAnimationDrawable.isOneShot=true

onClick()

}

private fun onClick() {

btnStart.setOnClickListener {

mAnimationDrawable.start()

}

btnStop.setOnClickListener {

mAnimationDrawable.stop()

}

}

}

这样就可以实现功能啦

而属性动画就比较多类型了:

1 实现逐渐透明效果:

先在res下面创建一个资源包,用来存放动画效果的xml文件

然后创建xml文件:

android:fillAfter="true"

>

android:duration="1000"

android:fromAlpha="1.0"

android:toAlpha="0.1"/>

android:fromAlpha设定动画开始的透明度

android:toAlpha设置动画变化的目标透明度

实现代码如下:

class ViewActivity : AppCompatActivity() {

private lateinit var tvText:TextView

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_view)

initView()

omClick()

}

private fun omClick() {

tvText.setOnClickListener {

//方案一:

// val animation=AnimationUtils.loadAnimation(this,R.anim.alpha)

// tvText.startAnimation(animation)

//方案二:

val alphaAnimator=AnimatorInflater.loadAnimator(this,R.animator.alpha)

//把需要实现效果的控件放进去

alphaAnimator.setTarget(tvText)

alphaAnimator.start()

}

}

private fun initView() {

tvText=findViewById(R.id.tv_text)

}

}

逐渐透明化的效果就出来了!!

2 移动动画的效果:

android:duration="1000"

android:fillAfter="true">

android:fromXDelta="0"

android:fromYDelta="0"

android:toXDelta="50%"

android:toYDelta="50%p"

android:repeatCount="1"

android:repeatMode="reverse"

/>

android:fillAfter设置动画是否保留移动后的效果,true为是,false的话就会效果实现后,返回原本的位置

android:fromXDelta设置x坐标开始的位置

android:toXDelta设置x坐标移动后的位置

注意下他们俩的填入数值,可以为整数,也可以为百分比,当输入为“50%”那就是对比控件自身的宽度的50%进行移动,如果输入为“50%p”,那就是对比父控件的宽度的50%进行移动!!

android:repeatCount设置控件效果展现重复的次数

android:repeatMode设置重复的模式,有两种,1⃣️reverse就是控件在重复的时候,会以倒倒放的形式重新开始

2⃣️restart在控件效果展现完成后,直接闪现回去,然后重新播放,如果没有设置android:repeatMode的话,就会默认使用第二种重复的模式

实现代码如下:

class TranslateAnimationActivity : AppCompatActivity() {

private lateinit var tvTranslate:TextView

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_translate_animation)

initView()

onClick()

}

private fun onClick() {

tvTranslate.setOnClickListener {

//方案一:

// val translateAnimation=AnimationUtils.loadAnimation(this,R.anim.translate)

// tvTranslate.startAnimation(translateAnimation)

//方案二:

tvTranslate.animate().translationX(300f).setDuration(1000).start()

}

}

private fun initView() {

tvTranslate=findViewById(R.id.tv_translate)

}

}

3 动画旋转效果

老规则,创建效果xml

android:duration="1000">

android:fromDegrees="0"

android:toDegrees="180"

android:pivotY="0"

android:pivotX="0"

android:repeatCount="infinite"

android:repeatMode="reverse"

/>

android:fromDegrees设置开始旋转的角度

android:toDegrees

设置旋转的角度

android:pivotY和android:pivotX就是设置旋转的点

,这个基点别的效果也可以应用上的哦

android:repeatCount="infinite"设置动画无限重复!!

实现代码如下:

class RotateAnimationActivity : AppCompatActivity() {

private lateinit var tvBotate:TextView

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_rotate_animation)

initView()

onClick()

}

private fun onClick() {

tvBotate.setOnClickListener {

val rotateAnimation= AnimationUtils.loadAnimation(this,R.anim.rotate)

tvBotate.startAnimation(rotateAnimation)

}

}

private fun initView() {

tvBotate=findViewById(R.id.tv_rotate)

}

}

4 组合动画效果

android:fillAfter="true">

android:fromDegrees="0"

android:toDegrees="360"

android:pivotX="50%"

android:pivotY="50%"

android:duration="1000"

android:repeatCount="infinite"

/>

android:fromYDelta="0"

android:toYDelta="0"

android:startOffset="1000"

android:fromXDelta="0"

android:toXDelta="60%p"

android:duration="1000"

/>

这里是把旋转和平移的效果组合使用了

android:startOffset="1000"设置该控件的的效果在1000毫秒后生效

class SetAnimationActivity : AppCompatActivity() {

private lateinit var setAnimation:TextView

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_set_animation)

initView()

onClick()

}

private fun onClick() {

setAnimation.setOnClickListener {

//方案一:

// val rotateAnimation= AnimationUtils.loadAnimation(this,R.anim.set)

// setAnimation.startAnimation(rotateAnimation)

//方案二:

// val rotateAnimation=ObjectAnimator.ofFloat(setAnimation,"rotation",0f,720f)

// //设置时间

// rotateAnimation.duration=1000

//

// val translateAnimation=ObjectAnimator.ofFloat(setAnimation,"x",0f,300f)

// translateAnimation.duration=1000

//

// val set=AnimatorSet()

// //两种效果同时显示

set.playTogether(rotateAnimation,translateAnimation)

// //设置效果先后顺序,先旋转再平移

// set.playSequentially(rotateAnimation,translateAnimation)

// set.start()

// //方案三:

// setAnimation.animate().rotation(720f).setDuration(1000).start()

// //setStartDelay(1000)设置延迟生效时间

// setAnimation.animate().translationX(300f).setDuration(1000).setStartDelay(1000).start()

val moveIn = ObjectAnimator.ofFloat(setAnimation, "translationX", -500f, 0f)

val rotate = ObjectAnimator.ofFloat(setAnimation, "rotation", 0f, 360f)

val fadeInOut = ObjectAnimator.ofFloat(setAnimation, "alpha", 1f, 0f, 1f)

val animSet = AnimatorSet()

animSet.play(rotate).with(fadeInOut).after(moveIn)

animSet.duration = 5000

animSet.start()

}

}

private fun initView() {

setAnimation=findViewById(R.id.tv_setAnimation)

}

}

5 动画展现速度的概念

class ValueAnimationActivity : AppCompatActivity() {

private lateinit var valueAnimation:Button

private val TAG = "ValueAnimationActivity"

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_value_animation)

initView()

onClick()

}

private fun onClick() {

valueAnimation.setOnClickListener {

val valueAnimator=ValueAnimator.ofInt(0,100)

valueAnimator.duration = 100

valueAnimator.addUpdateListener(object :ValueAnimator.AnimatorUpdateListener{

override fun onAnimationUpdate(animation: ValueAnimator?) {

var animatedFraction=animation?.animatedFraction

var animatedValue=animation?.animatedValue as Int

Log.d(TAG, "onAnimationUpdate: ${String.format("%3f %d",animatedFraction,animatedValue)}" )

}

})

valueAnimator.start()

}

}

private fun initView() {

valueAnimation=findViewById(R.id.btn_value)

}

}

今天就到了这里啦,先去忙工作啦!!

kotlin+android+基础,kotlin-android动画基础篇相关推荐

  1. IOS开发基础之核心动画 基础动画、关键帧、组动画案例

    IOS开发基础之核心动画 基础动画.关键帧.组动画案例 案例源码在我的主页里.实现效果图 // // ViewController.m // 30-核心动画 // // Created by 鲁军 o ...

  2. Android面试题之动画+事件处理篇

    动画+事件处理篇 前言 动画 1.Android 中的动画有哪几类 2.动画能组合在一起使用么? 3.插值器的种类有哪些? 4.如何自定义插值器 5.如何修改 Activity 进入和退出动画 事件处 ...

  3. android+下落+动画,完美起航-Android面试题之动画+事件处理篇

    前言 提示:秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是本篇文章正文内容 动画 1.Android 中的动画有哪几类 帧动画.补间动画.属性动 ...

  4. Android面试题之动画+事件处理篇,安卓消息分发机制

    关于整理问题 前言 ================================================================= 提示:秋招在即,计蒙准备在国庆假期结束前整理一套 ...

  5. android 自定义控件及动画基础 一

    Android 自定义控件及手势动画基础 第一章 浅谈自定义控件 文章目录 Android 自定义控件及手势动画基础 前言 一.浅谈自定义View的形态有几种? 二.如何学习自定义View 1.多阅读 ...

  6. Android开发基础——Kotlin简介

    什么是Kotlin Java代码在运行前需要编译生成一种特殊的class文件,然后Java虚拟机会识别并解释这些class文件,而Kotlin作为一种新的编程语言,就是将其代码同样编译生成为这样的cl ...

  7. Kotlin从小白到大牛第1篇 【Kotlin】基础视频课程-关东升-专题视频课程

    Kotlin从小白到大牛第1篇 [Kotlin]基础视频课程-7239人已学习 课程介绍         本视频是智捷课堂推出的一套"Kotlin语言学习立体教程"的视频第一部分, ...

  8. android动画入门,Android动画基础总结

    Android动画主要分为两种,视图动画和属性动画,视图动画又分为补间动画和帧动画两种.补间动画包含透明动画(Alpha),缩放动画(Scale),平移动画(Translate),旋转动画(Rotat ...

  9. 【Android 基础】Animation 动画介绍和实现

    转载自:http://www.cnblogs.com/yc-755909659/p/4290114.html 1.Animation 动画类型 Android的animation由四种类型组成: XM ...

最新文章

  1. Gridview][UpdateCommand的写法要点]
  2. ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署
  3. 辗转相除求最大公约数
  4. 无法获取签名信息,请上传有效包(110506)
  5. Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
  6. 常用的HTML标签(超文本标记语言)
  7. java打包带有外部jar,Eclipse使用总结——使用Eclipse打包带源码的jar包
  8. 导入 theano 失败。“cannot import name gof”
  9. ansys linux运行_ANSYS|大型Linux计算机ANSYS运算要点
  10. 代购集运系统平台一键上传淘宝商品至韩国coupang经验分享
  11. WebRTC之beamforming算法
  12. python中集合的概念
  13. f2fs存储结构初探
  14. 这样做,才能留住员工的心
  15. 软件生命周期是什么?
  16. Unity浏览器插件Embedded browser
  17. java毕业设计怎么做?
  18. Vi/Vim 编辑器常见命令
  19. 现代社会科学的优选法:谈取向运作法
  20. django问卷html,Django:动态问卷系统的Model设计

热门文章

  1. vue中参数传递(合集)
  2. 会议录音转文字app有哪些?教你三种录音转文字的方法
  3. 柴米油盐酱醋茶都是姓,为什么柴姓有130多万,酱姓却不足百人?
  4. 联想新零售从概念走向现实,或诞生店内版“拼多多”?
  5. 区块链开发公司 论区块链实现开发的价值
  6. OAuth 2.0实战课04-06笔记
  7. sql无法写入mysql_安装sql2008R2数据库时提示错误1406,安装程序无法将值写入注册表项?...
  8. vue3.0 study(二) 安装 element-plus踩坑汇总
  9. 计算机主板按cpu接口类型分为哪些?,主板的内部接口主要由哪七个组成?目前CPU的接...-卓优商学问答...
  10. SPOJ-375-Qtree-树链剖分(边的剖分)