簡(jiǎn)單轉(zhuǎn)盤(pán)的實(shí)現(xiàn)

一、簡(jiǎn)介

????????? 在A(yíng)ndroid的菜鳥(niǎo)路上,學(xué)習(xí)自定義控件,掌握了一點(diǎn)東西就想實(shí)踐一下,這時(shí)候剛好有個(gè)需求需要實(shí)現(xiàn)一個(gè)簡(jiǎn)單轉(zhuǎn)盤(pán)的效果,那就動(dòng)手去嘗試一下,封裝就...,只當(dāng)做是自己的練習(xí)吧。效果圖如下(點(diǎn)擊可以讓箭頭旋轉(zhuǎn)):

二、思路和主要代碼

1、圓環(huán)部分的實(shí)現(xiàn)。先畫(huà)一個(gè)藍(lán)色的大圓,再畫(huà)一個(gè)白色的小圓,前提是要設(shè)置相同的圓心,半徑部分就可以自己去定義。主要代碼:

畫(huà)圓環(huán)

2、兩條相交的直線(xiàn)。先讓畫(huà)布以圓心為中心點(diǎn)旋轉(zhuǎn)45度,然后再畫(huà)兩條互相垂直的直線(xiàn)即可。代碼如下:

3、畫(huà)三角形即圖中的箭頭。因?yàn)檫@三角形是需要轉(zhuǎn)動(dòng),所以需要設(shè)置canvas的旋轉(zhuǎn)的角度,再去畫(huà)三角形。一開(kāi)始設(shè)置三角形是在左邊的,因此先確定三角形的三個(gè)頂點(diǎn),然后在用Path類(lèi)來(lái)畫(huà)出三角形,至于旋轉(zhuǎn)其實(shí)就是利用canvas.rotate(degree, width / 2, height / 2);要注意的是旋轉(zhuǎn)的中心點(diǎn)是圓心,就可以讓三角形圍繞白色圓形轉(zhuǎn)動(dòng)了。不然就看不到旋轉(zhuǎn)的三角形了。代碼如下:

畫(huà)三角形

4、畫(huà)文本。x坐標(biāo)的是很容易確定的,y坐標(biāo)我取的是文本的底部,所以需要使用以下方法來(lái)獲取文本的范圍。


獲取文本的大小

之后就是畫(huà)出具體的內(nèi)容了,其它的文本也是類(lèi)似。

畫(huà)具體的文本

5、設(shè)置控件的點(diǎn)擊事件。

(1)判斷點(diǎn)擊是否落在圓環(huán)上。其實(shí)就是點(diǎn)到圓心的距離要大于小園的半徑同時(shí)小于大圓的半徑,這時(shí)候就能看出之前采用兩個(gè)圓組合成圓環(huán)的好處了。

判斷點(diǎn)是否在圓上

(2)判斷點(diǎn)落在哪一個(gè)區(qū)域。首先要計(jì)算出兩條直線(xiàn)的表達(dá)式,要注意的是Android里面的坐標(biāo)系豎直向下方向才是y軸的正方向。然后根據(jù)它在哪一條直線(xiàn)的上方和哪一條直線(xiàn)的下方等方向來(lái)判斷。比如最左邊的區(qū)域其實(shí)就是在傾斜角為45度直線(xiàn)的上方和另外一條直線(xiàn)的下方,這時(shí)候只需要判斷y值就可以了。

判斷點(diǎn)落在哪個(gè)范圍上

(3)計(jì)算三角形要旋轉(zhuǎn)的角度,這個(gè)就用暴力法來(lái)做,直接判斷當(dāng)前的位置和要旋轉(zhuǎn)到的位置來(lái)設(shè)置它們的角度。暫時(shí)沒(méi)想到其它的算法就只好將就了。

旋轉(zhuǎn)前的計(jì)算

(4)使用屬性動(dòng)畫(huà)讓三角形轉(zhuǎn)起來(lái)。兩個(gè)參數(shù)分別是三角形當(dāng)前的角度和要旋轉(zhuǎn)到的角度,然后在onAnimationUpdate回調(diào)方法里獲取到當(dāng)前的值,最后調(diào)用postInvalidate()方法重新繪圖。

開(kāi)始旋轉(zhuǎn)

(5)重寫(xiě)onTouchEvent方法。

三、總結(jié)。

這是我學(xué)習(xí)了自定義控件的基礎(chǔ)知識(shí)之后的實(shí)踐,算是入門(mén)了,當(dāng)然肯定會(huì)有很多不足的地方,慢慢來(lái)吧。我覺(jué)得遇到?jīng)]做過(guò)的東西,主要就是要有自己的想法,雖然有可能不完美,但是至少是自己的東西。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:canvas簡(jiǎn)介 1.1什么是canvas? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,882評(píng)論 2 32
  • 轉(zhuǎn)載請(qǐng)聲明 原文鏈接 關(guān)注公眾號(hào)獲取更多資訊 這篇文章主要總結(jié)H5的一些新增的功能以及一些基礎(chǔ)歸納,這里只是一個(gè)提...
    前端進(jìn)階之旅閱讀 9,221評(píng)論 22 225
  • 自尊這個(gè)東西必不可少,但是吧有時(shí)候可以不用太強(qiáng)悍。
    蟬笙閱讀 405評(píng)論 0 0
  • 端午節(jié)放假了。我要利用假日去體驗(yàn)一下跑滴的生活。小車(chē)跟隨我有近一年的時(shí)間啦。其實(shí),當(dāng)初買(mǎi)車(chē)的其中一個(gè)目的就是,利用...
    一片祥和閱讀 282評(píng)論 0 0
  • 【幸福路人謝淑偉 平頂山 堅(jiān)持分享第27天 20170907 星期四】 ...
    你今天怎么樣閱讀 282評(píng)論 0 0

友情鏈接更多精彩內(nèi)容