kotlin+android+基础,kotlin-android动画基础篇
因为最近在学习自定义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动画基础篇相关推荐
- IOS开发基础之核心动画 基础动画、关键帧、组动画案例
IOS开发基础之核心动画 基础动画.关键帧.组动画案例 案例源码在我的主页里.实现效果图 // // ViewController.m // 30-核心动画 // // Created by 鲁军 o ...
- Android面试题之动画+事件处理篇
动画+事件处理篇 前言 动画 1.Android 中的动画有哪几类 2.动画能组合在一起使用么? 3.插值器的种类有哪些? 4.如何自定义插值器 5.如何修改 Activity 进入和退出动画 事件处 ...
- android+下落+动画,完美起航-Android面试题之动画+事件处理篇
前言 提示:秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是本篇文章正文内容 动画 1.Android 中的动画有哪几类 帧动画.补间动画.属性动 ...
- Android面试题之动画+事件处理篇,安卓消息分发机制
关于整理问题 前言 ================================================================= 提示:秋招在即,计蒙准备在国庆假期结束前整理一套 ...
- android 自定义控件及动画基础 一
Android 自定义控件及手势动画基础 第一章 浅谈自定义控件 文章目录 Android 自定义控件及手势动画基础 前言 一.浅谈自定义View的形态有几种? 二.如何学习自定义View 1.多阅读 ...
- Android开发基础——Kotlin简介
什么是Kotlin Java代码在运行前需要编译生成一种特殊的class文件,然后Java虚拟机会识别并解释这些class文件,而Kotlin作为一种新的编程语言,就是将其代码同样编译生成为这样的cl ...
- Kotlin从小白到大牛第1篇 【Kotlin】基础视频课程-关东升-专题视频课程
Kotlin从小白到大牛第1篇 [Kotlin]基础视频课程-7239人已学习 课程介绍 本视频是智捷课堂推出的一套"Kotlin语言学习立体教程"的视频第一部分, ...
- android动画入门,Android动画基础总结
Android动画主要分为两种,视图动画和属性动画,视图动画又分为补间动画和帧动画两种.补间动画包含透明动画(Alpha),缩放动画(Scale),平移动画(Translate),旋转动画(Rotat ...
- 【Android 基础】Animation 动画介绍和实现
转载自:http://www.cnblogs.com/yc-755909659/p/4290114.html 1.Animation 动画类型 Android的animation由四种类型组成: XM ...
最新文章
- Gridview][UpdateCommand的写法要点]
- ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署
- 辗转相除求最大公约数
- 无法获取签名信息,请上传有效包(110506)
- Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
- 常用的HTML标签(超文本标记语言)
- java打包带有外部jar,Eclipse使用总结——使用Eclipse打包带源码的jar包
- 导入 theano 失败。“cannot import name gof”
- ansys linux运行_ANSYS|大型Linux计算机ANSYS运算要点
- 代购集运系统平台一键上传淘宝商品至韩国coupang经验分享
- WebRTC之beamforming算法
- python中集合的概念
- f2fs存储结构初探
- 这样做,才能留住员工的心
- 软件生命周期是什么?
- Unity浏览器插件Embedded browser
- java毕业设计怎么做?
- Vi/Vim 编辑器常见命令
- 现代社会科学的优选法:谈取向运作法
- django问卷html,Django:动态问卷系统的Model设计
热门文章
- vue中参数传递(合集)
- 会议录音转文字app有哪些?教你三种录音转文字的方法
- 柴米油盐酱醋茶都是姓,为什么柴姓有130多万,酱姓却不足百人?
- 联想新零售从概念走向现实,或诞生店内版“拼多多”?
- 区块链开发公司 论区块链实现开发的价值
- OAuth 2.0实战课04-06笔记
- sql无法写入mysql_安装sql2008R2数据库时提示错误1406,安装程序无法将值写入注册表项?...
- vue3.0 study(二) 安装 element-plus踩坑汇总
- 计算机主板按cpu接口类型分为哪些?,主板的内部接口主要由哪七个组成?目前CPU的接...-卓优商学问答...
- SPOJ-375-Qtree-树链剖分(边的剖分)