本文實(shí)例實(shí)現(xiàn)一個(gè)如下圖所示的Android自定義控件,可以直觀地展示某個(gè)球隊(duì)在某個(gè)賽季的積分?jǐn)?shù)和勝場(chǎng)、負(fù)場(chǎng)、平局?jǐn)?shù)
首先對(duì)畫布進(jìn)行區(qū)域劃分,整個(gè)控件分上下兩部分
上邊是個(gè)大的圓環(huán),圓環(huán)中間兩行文字,沒什么難度,選好圓心坐標(biāo)和半徑后直接繪制即可,繪制文字也是如此。
下部分是三個(gè)小的圓弧進(jìn)度條,弧的末端繪制一個(gè)小的實(shí)心圓
首先選好坐標(biāo)和半徑,然后先繪制三個(gè)圓環(huán)作為弧形進(jìn)度條的背景
之后從12點(diǎn)鐘開始繪制進(jìn)度弧,知道了圓環(huán)的圓心和半徑,也知道了弧對(duì)應(yīng)于12點(diǎn)鐘和圓環(huán)圓心的偏移角度
通過三角函數(shù)可以計(jì)算出進(jìn)度弧終點(diǎn)坐標(biāo),以進(jìn)度弧終點(diǎn)坐標(biāo)為圓心繪制一個(gè)小的實(shí)心圓即可
動(dòng)畫效果通過Handler的postDelayed方法觸發(fā)重繪即可實(shí)現(xiàn)
在項(xiàng)目中的效果如圖所示:
測(cè)試代碼如下:
final Random random=new Random(); final ScoreBoardView myView=(ScoreBoardView)findViewById(R.id.custom_view); myView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ myView.setColor(Color.BLUE); myView.setScore(random.nextInt(28)); myView.setWinDrawLose(random.nextInt(12),random.nextInt(15),random.nextInt(26)); } });