使用Android如何實(shí)現(xiàn)一個(gè)長按圓環(huán)動畫View效果?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

一、需求來源
最近想到一個(gè)需求,類似悅跑圈或者Keep的結(jié)束按鈕動畫


二、思路代碼
該動畫按鈕的主要作用就是防止用戶誤操作,具體實(shí)現(xiàn)思路如下:
1、監(jiān)聽用戶的觸摸事件OnTouchListener,在ACTION_DOWN的時(shí)候,記錄下xy坐標(biāo)和觸摸時(shí)間,同時(shí)start自定義View動畫;在ACTION_MOVE的過程中,判斷坐標(biāo)差值的偏移量是否在一個(gè)可接受的范圍內(nèi),是的話就保留當(dāng)前動畫,不是的話就清除按鈕上繪制的path;在ACTION_UP的時(shí)候,再次記錄下觸摸時(shí)間,比較兩個(gè)時(shí)間是否達(dá)到了長按規(guī)定的時(shí)間,是的話就執(zhí)行下一個(gè)事件,不是的話就停止動畫重置Path。
val touchMax = 50
var lastX = 0
var lastY = 0
circleView.setOnTouchListener(object : View.OnTouchListener{
override fun onTouch(p0: View?, motionEvent: MotionEvent): Boolean {
val endTime: Long
val x = motionEvent.x
val y = motionEvent.y
when (motionEvent.action) {
MotionEvent.ACTION_DOWN -> {
startTime = System.currentTimeMillis()
lastX = x.toInt()
lastY = y.toInt()
circleView.startAnim()
}
MotionEvent.ACTION_UP -> {
endTime = System.currentTimeMillis()
val during = endTime - startTime
if (during < App.LONG_CLICK_TIME) {
circleView.cancelAnim()
circleView.clearAll()
}else{
playMaxWarn()
}
}
MotionEvent.ACTION_MOVE -> {
if (abs(lastX - x) > touchMax || abs(lastY - y) > touchMax) {
circleView.clearAll()
}
}
}
return false
}
})
分享文章:使用Android如何實(shí)現(xiàn)一個(gè)長按圓環(huán)動畫View效果-創(chuàng)新互聯(lián)
本文來源:http://chinadenli.net/article0/ejioo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、搜索引擎優(yōu)化、建站公司、面包屑導(dǎo)航、電子商務(wù)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容