安卓 view淡入淡出(fade in fade out) kotlin

news2024/11/28 2:36:16

文章目录

  • 前言
  • 一、布局文件
  • 二、kotlin扩展方法
    • 1.fadeOutAnimation 淡出动画
    • 2.fadeInAnimation 淡入动画
  • 三、使用
  • 总结


前言

好久没写文章了,简单码一个淡入淡出,我们先上效果图

淡入淡出图片
那么接下来上代码


一、布局文件

我这边直接将activity_main.xml改为下列代码,可以看到其中包含一张图片,一条文本和一个按钮

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/iv" />

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv"
        android:text="点击淡入淡出"/>

</androidx.constraintlayout.widget.ConstraintLayout>

二、kotlin扩展方法

1.fadeOutAnimation 淡出动画

利用kotlin的扩展特性写了一个view的扩展方法
代码如下(示例):

    fun View.fadeOutAnimation() {
        val mFadeOutAnimation: AlphaAnimation?
        // 监听动画结束的操作
        mFadeOutAnimation = AlphaAnimation(1.0f, 0.0f)
        //淡出时间
        mFadeOutAnimation.setDuration(1000)
        mFadeOutAnimation.fillAfter = true
        mFadeOutAnimation.setAnimationListener(object : AnimationListener {
            override fun onAnimationStart(arg0: Animation) {
            }

            override fun onAnimationRepeat(arg0: Animation) {
            }

            override fun onAnimationEnd(arg0: Animation) {
                this@fadeOutAnimation.visibility = View.GONE
            }
        })
        this@fadeOutAnimation.startAnimation(mFadeOutAnimation)
    }
  • setDuration 是淡出动画持续时间
  • fillAfter 是设置在动画结束过后保持最后的样子
  • setAnimationListener 是为了在动画结束时完全隐藏图片,让我们一会进行淡出时不会很突兀
  • startAnimation 开始动画

2.fadeInAnimation 淡入动画

淡入动画也是一样的
代码如下(示例):

    fun View.fadeInAnimation() {
        var mFadeInAnimation: AlphaAnimation?
        mFadeInAnimation = AlphaAnimation(0.0f, 1.0f)
        //淡入时间
        mFadeInAnimation.setDuration(1000)
        mFadeInAnimation.fillAfter = true
        this@fadeInAnimation.startAnimation(mFadeInAnimation)
    }
  • setDuration 是淡入动画持续时间
  • fillAfter 是设置在动画结束过后保持最后的样子
  • startAnimation 开始动画

三、使用

直接初始化图片然后使用就好了

  // 假设imageView是你要更换图片的ImageView控件
        val imageView = findViewById<ImageView>(R.id.iv)
        val textView = findViewById<TextView>(R.id.tv)
        val button = findViewById<Button>(R.id.btn)

        button.setOnClickListener {
            imageView.fadeOutAnimation()
            textView.fadeOutAnimation()


            MainScope().launch {
                //假设这里是加载网络图片所耗时
                delay(300)
            }

            if (textView.text != "这是红色") {
                imageView.setImageResource(R.color.red)
                textView.text = "这是红色"
            } else {
                imageView.setImageResource(R.color.white)
                textView.text = "这是白色"
            }

            imageView.fadeInAnimation()
            textView.fadeInAnimation()
        }

完整activtiy代码如下

import android.os.Bundle
import android.view.View
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.Animation.AnimationListener
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        // 假设imageView是你要更换图片的ImageView控件
        val imageView = findViewById<ImageView>(R.id.iv)
        val textView = findViewById<TextView>(R.id.tv)
        val button = findViewById<Button>(R.id.btn)

        button.setOnClickListener {
            imageView.fadeOutAnimation()
            textView.fadeOutAnimation()


            MainScope().launch {
                //假设这里是加载网络图片所耗时
                delay(300)
            }

            if (textView.text != "这是红色") {
                imageView.setImageResource(R.color.red)
                textView.text = "这是红色"
            } else {
                imageView.setImageResource(R.color.white)
                textView.text = "这是白色"
            }

            imageView.fadeInAnimation()
            textView.fadeInAnimation()
        }


    }

    fun View.fadeOutAnimation() {
        val mFadeOutAnimation: AlphaAnimation?
        // 监听动画结束的操作
        mFadeOutAnimation = AlphaAnimation(1.0f, 0.0f)
        //淡出时间
        mFadeOutAnimation.setDuration(1000)
        mFadeOutAnimation.fillAfter = true
        mFadeOutAnimation.setAnimationListener(object : AnimationListener {
            override fun onAnimationStart(arg0: Animation) {
            }

            override fun onAnimationRepeat(arg0: Animation) {
            }

            override fun onAnimationEnd(arg0: Animation) {
                this@fadeOutAnimation.visibility = View.GONE
            }
        })
        this@fadeOutAnimation.startAnimation(mFadeOutAnimation)
    }

    fun View.fadeInAnimation() {
        var mFadeInAnimation: AlphaAnimation?
        mFadeInAnimation = AlphaAnimation(0.0f, 1.0f)
        //淡入时间
        mFadeInAnimation.setDuration(1000)
        mFadeInAnimation.fillAfter = true
        this@fadeInAnimation.startAnimation(mFadeInAnimation)
    }

}

总结

本文通过一个简单的示例介绍了在Android开发中实现淡入淡出效果的方法。首先,我们定义了两个扩展方法,分别用于实现淡出动画和淡入动画。然后,在点击按钮时,我们通过调用这两个方法来实现图片和文本的淡出效果。在耗时操作完成后,我们根据文本内容的不同来切换图片和文本的内容,并进行淡入效果的展示。通过这种方式,我们可以实现图片和文本的平滑过渡,给用户带来更好的使用体验。代码简单易懂,具有一定的可复用性。希望对大家的Android开发有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1708395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用sql注入对某非法网站的渗透

本文仅用于技术讨论&#xff0c;切勿用于违法途径&#xff0c;且行且珍惜&#xff0c; 所有非经授权的渗透&#xff0c;都是违法行为 前言 这段时间一直在捣鼓sql注入&#xff0c;最近又通过一个sql注入点&#xff0c;成功进入某个非法网站的后台&#xff0c;拿到整个网站的…

具有固定宽度的盒子:\makebox, \parbox

makebox \makebox 是 LaTeX 中的一个命令&#xff0c;用于创建一个具有固定宽度的盒子&#xff0c;并在该盒子内放置内容。这个命令可以用于控制文本或对象的位置和对齐。 语法如下&#xff1a; \makebox[<width>][<alignment>]{<content>}其中&#xff1…

世界改变了我?还是我在改变着这个世界?-教育的魅力

目录 一、背景二、过程1.拥抱不确定性的心态2.应对变数的积极3.螺旋向上的能力4.突破自我的意志 三、总结 一、背景 现在这个时代唯一确定的就是不确定&#xff0c;社会发展太快了&#xff0c;尤其是中国的发展速度&#xff1b;大国生态人口生态。 有时候隐约中我自己也觉得和…

短剧解说一键生成原创文案的快速方法

如今短剧创作火的一塌糊涂&#xff0c;它们以其简洁明了的剧情、生动有趣的角色和紧凑的节奏&#xff0c;吸引了大量观众的关注。因此&#xff0c;它所带来的流量是非常巨大&#xff0c;不少人将流量的获取瞄准了短剧创作领域以及短剧解说领域。而对于短剧解说人员来讲&#xf…

FreeRtos进阶——消息队列的操作逻辑

消息队列&#xff08;queue&#xff09; 在不同的任务之间&#xff0c;如果我们需要互相之间通信&#xff0c;使用全局变量进行通信&#xff0c;是一种不安全的通信的方式。为保证线程安全&#xff0c;我们需要引入消息队列的通信方式。 粗暴的消息队列 为保证线程的安全&am…

数字化工厂怎么收集,处理数据?

数字化工厂的数据收集与处理 数字化工厂是现代化工厂&#xff0c;利用数字技术和数据分析提高效率和优化流程。数据分析作为数字化工厂的核心技术&#xff0c;对数据的获取与处理至关重要。在数字化工厂中&#xff0c;数据的来源包括企业内部信息系统、物联网信息以及外部信息&…

VSCode安装platformio插件

文章目录 一、安装VSCode二、安装platformio&#xff08;一&#xff09;整理文件夹&#xff08;二&#xff09;整理Python环境&#xff08;三&#xff09;安装platformio 三、创建ESP8266项目四、使用命令行创建项目五、创建项目太久怎么办六、参考链接 一、安装VSCode VSCode…

探寻导师:2024年最新研究生导师评价汇总

随着考研热潮的不断升温&#xff0c;对于研究生导师的选择变得愈发重要。导师不仅关系到研究生的学术成长&#xff0c;还直接影响到未来的职业发展。然而&#xff0c;如何找到一位合适的导师成为许多考生头疼的问题。为了帮助广大考生更好地选择导师&#xff0c;整理了最新最全…

如何破解navicat16

先安装好没破解的navicat16 以管理员身份运行 ‘无限试用Navicat.bat’ 复制这个 点击属性 打开文件所属位置 把复制的文件粘贴进去 直接启动navicat16

提升(或降低)插入的内容的位置:\raisebox

\raisebox 是 LaTeX 中的一个命令&#xff0c;用于提升&#xff08;或降低&#xff09;插入的内容&#xff08;如文本、图像等&#xff09;的位置。该命令可以用于调整垂直位置&#xff0c;使内容相对于周围内容上下移动。 语法如下&#xff1a; \raisebox{<distance>}…

论文阅读笔记:Task-Customized Mixture of Adapters for General Image Fusion

论文阅读笔记&#xff1a;Task-Customized Mixture of Adapters for General Image Fusion 1 背景2 创新点3 方法4 模块4.1 任务定制混合适配器4.2 提示生成4.3 提示驱动融合4.4 互信息正则化MIR4.5 任务定制化损失 5 实验5.1 VIF任务5.2 MEF任务5.3 MFF任务5.4 消融实验5.5 性…

设计模式19——观察者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 观察者模式&#xff08;Observ…

Java程序员必备技能之MySQL数据库 图解整理/快速入门

恭喜大家来到全新的篇章——MySQL数据库,这一篇我们将学会MySQL数据库的原理、使用sql对数据库的增删改查操作、以及对MySQL数据库的权限管理和用户管理等内容。请大家耐心看下去,相信大家在看完这篇文章后,一定可以学会MySQL数据库(不会Java也可以学会!)。 ps:想要补充…

AAA实验配置

一、实验目的 掌握AAA本地认证的配置方法 掌握AAA本地授权的配置方法 掌握AAA维护的方法 1.搭建实验拓扑图 2.完成基础配置&#xff1a; 3.使用ping命令测试两台设备的连通性&#xff1a; 二、配置AAA 1.打开R1&#xff1a;配置AAA方案 这两个方框内的可以改名&#xff0c…

5.26 基于UDP的网络聊天室

需求&#xff1a; 如果有人发送消息&#xff0c;其他用户可以收到这个人的群聊信息 如果有人下线&#xff0c;其他用户可以收到这个人的下线信息 服务器可以发送系统信息实现模型 模型&#xff1a; 代码&#xff1a; //chatser.c -- 服务器端实现 #include <stdio.h>…

php TP8 阿里云短信服务SDKV 2.0(跳大坑)

安装&#xff1a;composer require alibabacloud/dysmsapi-20170525 2.0.24 官方文档&#xff1a;短信服务_SDK中心-阿里云OpenAPI开发者门户 (aliyun.com) 特别注意&#xff1a;传入参数获得值形式 这样也不行 $sendSmsRequest new SendSmsRequest($addData); 还有一个大坑…

PLC远程调试

随着工业自动化的快速发展&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;已经成为现代工业生产线的核心控制设备。然而&#xff0c;传统的PLC调试方式往往受限于地理位置和物理连接&#xff0c;使得工程师在调试过程中面临诸多不便。在这个背景下&#xff0c;HiWoo …

SpringSecurity登录和校验流程简述

认证&#xff1a; 验证当前访问系统的是不是本系统的用户&#xff0c;并且要确认具体是哪个用户 授权&#xff1a; 经过认证后判断当前用户是否有权限进行某个操作 一、入门案例实现 搭建springboot工程后&#xff0c;创建启动类和Controller&#xff0c;引入SpringSecurity依…

C++模板——非类型模板参数、模板的特化以及模板的分离编译

目录 非类型模板参数 模板的特化 概念 函数模板特化 类模板特化 全特化 偏特化 模板的分离编译 什么是分离编译 模板的分离编译 解决方法 模板总结 非类型模板参数 模板参数可分为类型形参和非类型形参。类型形参&#xff1a; 出现在模板参数列表中&#xff0c;跟…

垂类短视频:四川鑫悦里文化传媒有限公司

垂类短视频&#xff1a;内容细分下的新媒体力量 随着移动互联网的迅猛发展和智能手机的普及&#xff0c;短视频已成为当下最受欢迎的媒介形式之一。四川鑫悦里文化传媒有限公司而在短视频领域&#xff0c;一个新兴的概念——“垂类短视频”正逐渐崭露头角&#xff0c;以其独特…