前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。
👉点击跳转到教程
一.创建一个类CircularRevealHelper继承ConstraintHelper代码如下
/**
* @Author: ly
* @Date: 2024/2/22
* @Description: 实现过渡动画
*/
class CircularRevealHelper(context: Context?, attrs: AttributeSet?) :
ConstraintHelper(context, attrs) {
override fun updatePostLayout(container: ConstraintLayout) {
super.updatePostLayout(container)
referencedIds.forEach {
val view = container.getViewById(it)// 根据引用的 ID 获取对应的视图
val radius = hypot(
view.width.toDouble(),
view.height.toDouble()
).toInt() // 计算半径,使用勾股定理计算两边的平方和再开方
ViewAnimationUtils.createCircularReveal(
view,
0,
0,
0f,
radius.toFloat()
)// 创建 CircularReveal 动画效果
.setDuration(2000L)// 设置动画持续时间为 2000 毫秒
.start() // 启动动画
}
}
}
继承ConstraintHelper的作用:继承 ConstraintHelper 类的主要目的是为了在自定义 CircularRevealHelper 类中重用 ConstraintLayout 的布局约束和属性。ConstraintHelper 是用于帮助管理和操控 ConstraintLayout 中子视图的辅助类,它可以帮助开发者更方便地管理视图之间的约束关系。
通过继承 ConstraintHelper 类,CircularRevealHelper 类可以继承 ConstraintLayout 的功能,并且可以通过调用父类的方法来获取 ConstraintLayout 中的子视图,进而对这些子视图进行 CircularReveal 动画的实现。这样做可以提高代码的重用性,同时也符合面向对象编程的设计原则,使得代码更加模块化、可维护和可扩展。
之后在将该CircularRevealHelper类在xml布局引入即可使用。
layout_circular_reveal.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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.example.customviewtouchdrag.CircularRevealHelper
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="iv1,iv2,iv3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
之后运行即可得到效果: