Kotlin使用TransitionDrawable实现颜色渐变效果流程讲解
作者:破浪会有时 发布时间:2023-03-28 06:54:08
1 导入需要渐变的图片
如果需要实现图片之间的渐变效果,我们需要两张照片,这样才能实现照片1到照片2的渐变。在路径 /res/values/
下,我们新建一个 arrays.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="icons">
<item>@drawable/idea1</item>
<item>@drawable/idea2</item>
</array>
</resources>
这个文件包含了两个 item:@drawable/idea1
以及 @drawable/idea2
,把它们写在一个 array 里面。这里,我们导入的两张图片的名字分别是 idea1.png
和 idea2.png
,存放于 res/drawable/
路径下。
从上面两张照片我们可以看到,我们希望通过 TransitionDrawable
呈现出灯泡的开关效果。
2 activity_main.xml
这里例子涉及到的前端由三部分组成,一个 TextView,一个 ImageView,以及一个 Switch,当我们点击了 Switch 按钮,图片的灯光就可以实现亮暗之间的变化,以及字体背景的渐变。
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:text="案例2:灯泡颜色渐变"
android:textSize="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/pushButton" />
<ImageView
android:id="@+id/iv_light"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/idea"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.218" />
<Switch
android:id="@+id/switchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="20dp"
android:showText="true"
android:textOff="关"
android:textOn="开"
app:layout_constraintTop_toBottomOf="@+id/iv_light"
tools:ignore="UseSwitchCompatOrMaterialXml" />
3 MainActivity.kt
@SuppressLint("ClickableViewAccessibility", "ResourceType")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val resources: Resources = resources
val icons: TypedArray = resources.obtainTypedArray(R.array.icons)
val drawable = icons.getDrawable(0) // ending image
val drawableTwo = icons.getDrawable(1) // starting image
val iconDrawables = arrayOf(drawable,drawableTwo)
var transitionDrawableIcon = TransitionDrawable(iconDrawables);
val colorDrawables = arrayOf(ColorDrawable(Color.RED),ColorDrawable(Color.GREEN) )
var transitionDrawable = TransitionDrawable(colorDrawables)
switchView.setOnCheckedChangeListener { buttonView, isChecked ->
iv_light.setImageDrawable(transitionDrawableIcon)
transitionDrawableIcon.reverseTransition(
2000
)
transitionDrawable.isCrossFadeEnabled = false
val transitionDrawableTextView = TransitionDrawable(colorDrawables)
textView2.background = transitionDrawableTextView
transitionDrawableTextView.startTransition(1000)
}
}
我们先导入这两张图片,然后这个array作为输入给到 TransitionDrawable
函数:var transitionDrawableIcon = TransitionDrawable(iconDrawables);
。对于文字背景也是一个道理,我们需要把需要渐变的颜色先放到一个array里面:val colorDrawables = arrayOf(ColorDrawable(Color.RED),ColorDrawable(Color.GREEN) )
,然后再作为输入给到 TransitionDrawable
函数:var transitionDrawable = TransitionDrawable(colorDrawables)
。当我们点击 Switch 按钮后,灯泡会变亮(实际上就是两张灯泡之间的颜色渐变),字体背景也会从红色变化到绿色。
来源:https://blog.csdn.net/zyctimes/article/details/128977276


猜你喜欢
- 一般学过C#的都知道,Array 一旦定义好,比如四个长度,当需要再往里面添加元素的时候,需要Array.Resize一下才可以。有鉴于此,
- 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。 首先
- 本文实例讲述了android编程之xml文件读取和写入方法。分享给大家供大家参考。具体分析如下:一、环境:主机:WIN8开发环境:Eclip
- Java的三种标准注解和四种元注解先来说说什么是注解注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个
- 一、save(单条添加)源码@Transactional@Overridepublic <S extends T> S save
- 本文实例为大家分享了Android图表库HelloChart绘制多折线图的具体代码,供大家参考,具体内容如下一、效果图二、实现步骤1.添加依
- 如今,互联网项目对于安全的要求越来越严格,这就是对后端开发提出了更多的要求,目前比较成熟的几种大家比较熟悉的模式,像RBAC 基于角色权限的
- NoHttp是专门做Android网络请求与下载的框架,NoHttp基本使用方法如下本文demo源码下载地址: http://xiazai.
- 本文实例讲述了Android使用GPS获取用户地理位置并监听位置变化的方法。分享给大家供大家参考,具体如下:LocationActivity
- 重写java object类的equals方法覆盖equals方法请遵守约定什么情况下要覆盖equals方法容易违反的对称性不易察觉的传递性
- 为了完成以上的需求,我们就需要模拟浏览器浏览网页,得到页面的数据在进行分析,最后把分析的结构,即整理好的数据写入数据库。那么我们的思路就是:
- 1、this关键字首先需要提醒的是,在整个Java之中,this是最麻烦的一个关键字,只要是代码开发,几乎都离不开this。在Java中th
- Spring @Order进行排序直接上代码public class OrderAnnotationTest { &
- springboot读取文件,打成jar包后访问不到最新开发出现一种情况,springboot打成jar包后读取不到文件,原因是打包之后,文
- 我们经常会看到有一些app的banner界面可以实现循环播放多个广告图片和手动滑动循环的效果。看到那样的效果,相信大家都会想到ViewPag
- 前言开发中常用到主从数据库来提高系统的性能。怎么样才能方便的实现主从读写分离呢?近日工作任务较轻,有空学习学习技术,遂来研究如果实现读写分离
- 写了一个过滤器,根据需要限制edittext输入的整数和小数位,如下代码:package allone.verbank.apad.clien
- 前言任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来
- 本文实例为大家分享了flutter实现底部导航栏切换的具体代码,供大家参考,具体内容如下思路:MaterialApp是提供了bottomna
- 本文实例讲述了C#使用iTextSharp设置PDF所有页面背景图功能的方法。分享给大家供大家参考。具体如下:在生成PDF 的时候,虽然可以