使用Android如何實(shí)現(xiàn)一個(gè)長(zhǎng)按圓環(huán)動(dòng)畫(huà)View效果-創(chuàng)新互聯(lián)

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

堅(jiān)守“ 做人真誠(chéng) · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都水泥攪拌車小微創(chuàng)業(yè)公司專業(yè)提供成都企業(yè)網(wǎng)站建設(shè)營(yíng)銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺(jué)設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁(yè)布局、功能開(kāi)發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

一、需求來(lái)源

最近想到一個(gè)需求,類似悅跑圈或者Keep的結(jié)束按鈕動(dòng)畫(huà)

使用Android如何實(shí)現(xiàn)一個(gè)長(zhǎng)按圓環(huán)動(dòng)畫(huà)View效果
使用Android如何實(shí)現(xiàn)一個(gè)長(zhǎng)按圓環(huán)動(dòng)畫(huà)View效果

二、思路代碼

該動(dòng)畫(huà)按鈕的主要作用就是防止用戶誤操作,具體實(shí)現(xiàn)思路如下:
1、監(jiān)聽(tīng)用戶的觸摸事件OnTouchListener,在ACTION_DOWN的時(shí)候,記錄下xy坐標(biāo)和觸摸時(shí)間,同時(shí)start自定義View動(dòng)畫(huà);在ACTION_MOVE的過(guò)程中,判斷坐標(biāo)差值的偏移量是否在一個(gè)可接受的范圍內(nèi),是的話就保留當(dāng)前動(dòng)畫(huà),不是的話就清除按鈕上繪制的path;在ACTION_UP的時(shí)候,再次記錄下觸摸時(shí)間,比較兩個(gè)時(shí)間是否達(dá)到了長(zhǎng)按規(guī)定的時(shí)間,是的話就執(zhí)行下一個(gè)事件,不是的話就停止動(dòng)畫(huà)重置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è)長(zhǎng)按圓環(huán)動(dòng)畫(huà)View效果-創(chuàng)新互聯(lián)
本文來(lái)源:http://muchs.cn/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)