網站首頁 編程語言 正文
?
? ? ? ?日常的Android開發中可能大家都見過類似這種水波紋展開的效果,比如加載一張圖片的時候使用水波紋加載,其實這種實現非常簡單。因為Google已經為我們提供了一個非常方便地工具類
ViewAnimationUtils
? ? ? 它的實現非常簡單,就這個類,其中有個方法如下
createCircularReveal(View view, int centerX, int centerY, float startRadius, float endRadius)
? ? ? 該方法的作用就是實例化一個RevealAnimator,該Animator包含了水波紋效果的屬性設置。其中的5個參數非常好理解,含義如下:
view——為水波紋效果關聯的視圖
centerX——水波紋擴散的中心點x坐標
centerY——水波紋擴散的中心點y坐標
startRadius——水波紋擴散前的初始半徑
endRadius——水波紋擴散后的結束半徑
? ? ? 該方法的強大之處就在于你可以結合動畫的加速器和持續時間來自定義效果,此外水波紋的起始擴展位置也是可以非常靈活地定制的。
? ? ? 核心代碼其實非常簡單,下面的代碼實現了整體布局從左上角水波紋展開的效果+圖片點擊從中間水波紋展開的效果
class TestMDAnimActivity : AppCompatActivity() {
private lateinit var mClyContainer: ConstraintLayout
private lateinit var mImgBg: AppCompatImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test_mdanim)
initWidgets()
addListeners()
}
private fun initWidgets() {
mClyContainer = findViewById(R.id.cly_container)
mImgBg = findViewById(R.id.img_bg)
mClyContainer.post {
// 這兩個動畫只有前面的可以執行,所以采用該方式想實現兩個水波紋碰撞效果是不可行的
val anim2 = ViewAnimationUtils.createCircularReveal(
mClyContainer,
resources.displayMetrics.widthPixels,
resources.displayMetrics.heightPixels,
10F,
2000F
)
val anim1 = ViewAnimationUtils.createCircularReveal(
mClyContainer,
100,
100,
10F,
2000F
)
val animSet = AnimatorSet().apply {
duration = 1000
interpolator = AccelerateDecelerateInterpolator()
playTogether(anim1, anim2)
start()
}
}
}
private fun addListeners() {
mImgBg.setOnClickListener {
ViewAnimationUtils.createCircularReveal(
mImgBg,
it.width / 2,
it.height / 2,
10F,
2000F
).apply {
duration = 1000
interpolator = AccelerateDecelerateInterpolator()
start()
}
}
}
}
原文鏈接:https://blog.csdn.net/ldld1717/article/details/124694416
相關推薦
- 2021-12-09 Jenkins+GitLab+Docker持續集成LNMP
- 2022-11-06 React如何接收excel文件下載導出功能封裝_React
- 2022-04-27 Shell獲取路徑操作(dirname?$0?pwd)的實現_linux shell
- 2022-07-07 Python數據分析之?Matplotlib?3D圖詳情_python
- 2022-06-13 基于Docker與Jenkins實現自動化部署的原理解析_docker
- 2022-10-26 Go?REFLECT?Library反射類型詳解_Golang
- 2022-04-30 C語言鏈表實現商品庫存管理系統_C 語言
- 2022-09-30 QT實現多文件拖拽獲取路徑的方法_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支