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

文章目录

  • 前言
  • 一、布局文件
  • 二、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开发有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot和Apache Doris实现实时广告推荐系统

本专题旨在向读者深度解读Apache Doris技术,探讨其与SpringBoot框架结合在各类实际应用场景中的角色与作用。本专题包括十篇文章,每篇文章都概述了一个特定应用领域,如大数据分析、实时报告系统、电商数据分析等,并通过对需求的解析、解决方案的设计、实际应用示例的展示以…

Java | Leetcode Java题解之第104题二叉树的最大深度

题目&#xff1a; 题解&#xff1a; class Solution {public int maxDepth(TreeNode root) {if (root null) {return 0;}Queue<TreeNode> queue new LinkedList<TreeNode>();queue.offer(root);int ans 0;while (!queue.isEmpty()) {int size queue.size();wh…

护网2024-攻防对抗解决方案思路

一、护网行动简介 近年来&#xff0c;网络安全已被国家上升为国家安全的战略层面&#xff0c;网络安全同样也被视为维护企业业务持续性的关键。国家在网络安全治理方面不断出台法规与制度&#xff0c;并实施了一些大型项目和计划&#xff0c;如网络安全法、等级保护、网络安全…

SOLIDWORKS教育版代理商应该如何选择?

SOLIDWORKS作为目前流行的三维设计软件在工程设计&#xff0c;制造和建筑中有着广泛的应用前景。教育版SOLIDWORKS软件是学生及教育机构学习教学的理想平台。 下面介绍几个挑选SOLIDWORKS教育版代理的关键要素: 1、专业知识与经验&#xff1a;代理商应掌握SOLIDWORKS等软件的丰…

富唯智能镀膜上下料设备采用最新的技术

现代工业竞争日趋激烈&#xff0c;高效生产已成为企业持续发展的关键。我们的设备不仅实现了高速上下料&#xff0c;更通过智能化控制系统实现了对生产流程的精准监控和调整&#xff0c;轻松应对高强度生产需求。 1、快速响应&#xff0c;高效生产 富唯智能镀膜上下料设备采用…

IP 分片过程及偏移量计算

IP 报头中与分片相关的三个字段 1、 标识符&#xff08; ldentifier )&#xff1a;16 bit 该字段与 Flags 和 Fragment Offest 字段联合使用&#xff0c; 对较大的上层数据包进行分段&#xff08; fragment &#xff09; 操作。 路由器将一个包拆分后&#xff0c;所有拆分开的…

el-date-picker限制时间选择,不能选择当前日期之后时间

要求&#xff1a;时间选择不能超过当前日期之后的 效果&#xff1a; 结构代码&#xff1a;&#xff1a; <el-form-item label"时间&#xff1a;"><el-date-pickerv-model"time"type"datetimerange"range-separator"至"start…

[LLM-Agent]万字长文深度解析规划框架:HuggingGPT

HuggingGPT是一个结合了ChatGPT和Hugging Face平台上的各种专家模型&#xff0c;以解决复杂的AI任务&#xff0c;可以认为他是一种结合任务规划和工具调用两种Agent工作流的框架。它的工作流程主要分为以下几个步骤&#xff1a; 任务规划&#xff1a;使用ChatGPT分析用户的请求…

卷积神经网络-奥特曼识别

数据集 四种奥特曼图片_数据集-飞桨AI Studio星河社区 (baidu.com) 中间的隐藏层 已经使用参数的空间 Conv2D卷积层 ReLU激活层 MaxPool2D最大池化层 AdaptiveAvgPool2D自适应的平均池化 Linear全链接层 Dropout放置过拟合&#xff0c;随机丢弃神经元 -----------------…

mac安装的VMware虚拟机进行桥接模式配置

1、先进行网络适配器选择&#xff0c;选择桥接模式 2、点击网络适配器 设置... 3、选择WiFi&#xff08;我使用的是WiFi&#xff0c;所以选择这个&#xff09;&#xff0c;注意看右边的信息&#xff1a;IP和子网掩码&#xff0c;后续配置虚拟机的ifcfg-ens文件会用到 4、编辑if…

C语言学习笔记-- 3.4.2实型变量

1.实型数据在内存中的存放形式&#xff08;了解&#xff09; 实型数据一般占4个字节&#xff08;32位&#xff09;内存空间。按指数形式存储。 2.实型变量的分类&#xff08;掌握&#xff09; 实型变量分为&#xff1a;单精度&#xff08;float型&#xff09;、双精度&#…

AI视频智能分析技术赋能营业厅:智慧化管理与效率新突破

一、方案背景 随着信息技术的快速发展&#xff0c;图像和视频分析技术已广泛应用于各行各业&#xff0c;特别是在营业厅场景中&#xff0c;该技术能够有效提升服务质量、优化客户体验&#xff0c;并提高安全保障水平。TSINGSEE青犀智慧营业厅视频管理方案旨在探讨视频监控和视…

基于FPGA的VGA协议实现

目录 一、 内容概要二、 了解VGA2.1 概念 三、 VGA基础显示3.1 条纹显示3.2 显示字符3.2.1 准备工作3.2.2 提取文字3.2.3 编写代码3.2.4 编译烧录 3.3 显示图像3.3.1 准备工作3.3.2 实现例程3.3.3 编译烧录 四、参考链接 一、 内容概要 深入了解VGA协议&#xff0c;理解不同显示…

905. 按奇偶排序数组 - 力扣

1. 题目 给你一个整数数组 nums&#xff0c;将 nums 中的的所有偶数元素移动到数组的前面&#xff0c;后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 2. 示例 3. 分析 开辟一个数组res用来保存操作过后的元素。第一次遍历数组只插入偶数&#xff0c;第二次遍历数组…

【ArcGISPro】CSMPlugins文件夹

在ArcGISPro软件的CSMPlugins文件夹含有以下一个应用程序的扩展 从文件的名称可以看出美国地质调查局的太空地质学与ESRI合作进行的一个软件扩展&#xff0c;而USGS主要是遥感影像方向的应该&#xff0c;所以估计该dll的主要功能是多遥感影像进行处理&#xff0c;支持软件的不同…

Steam游戏搬砖:靠谱吗,详细版说下搬砖中的核心内容!

可能大家也比较关注国外Steam游戏搬砖这个项目&#xff0c;最近单独找我了解的也比较多&#xff0c;其实也正常&#xff0c;因为现在市面上的项目很多都很鸡肋&#xff0c;而且很多都是一片红海&#xff0c;内卷太过严重&#xff0c;所以对于Steam的关注度也高很多&#xff0c;…

探秘网页内容提取:教你定位特定标签

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、定位带有ID属性的第二个标签 三、定位具有特定属性值的标签 四、提取含有特…

【OpenCV】图形绘制与填充

介绍了绘制、填充图像的API。也介绍了RNG类用来生成随机数。相关API&#xff1a; line() rectangle() circle() ellipse() putText() 代码&#xff1a; #include "iostream" #include "opencv2/opencv.hpp"using namespace std; using namespace cv…

全局配置Maven

如果开着项目&#xff0c;就file->close project 如果创建有问题可以转到这篇rIDEA2024创建maven项目-CSDN博客https://blog.csdn.net/weixin_45588505/article/details/139271562?spm1001.2014.3001.5502

Unity SetParent第二个参数worldPositionStays的意义

初学Unity的小知识&#xff1a; 改变对象的父级有三种调用方式&#xff0c;如下&#xff1a; transMe.SetParent(transParent,true); transMe.SetParent(transParent,false); transMe.parent transParent;具体有什么区别呢&#xff0c;这里写一个测试例子来详细说明&#xff…