自定義雷達統(tǒng)計控件

因為剛剛學習了Android畫布操作,為了鞏固一下,寫了一個自定義雷達控件這個控件只暴露了一個一個最基本的接口,設置數(shù)據(jù),對坐標軸數(shù)量,單位長度等統(tǒng)計要素都沒考慮,如果以后有時間可能會添加進去。先上個截圖


截圖

上個核心代碼

packagehuiyan.com.costomview_learn2;

importandroid.content.Context;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.Path;

importandroid.support.annotation.Nullable;

importandroid.util.AttributeSet;

importandroid.view.View;

importjava.util.ArrayList;

/**

*?Created?by?lenovo?on?2017/7/5.

*/

publicclassMyViewextendsView{

privatePaintmPaint;//繪制放射線的畫筆

privatePainthexPaint;//繪制六邊形的畫筆

privatePaintpoPaint;//繪制數(shù)據(jù)的畫筆

privateArrayListdatas=newArrayList<>();

publicMyView(Contextcontext)?{

super(context);

init();

}

publicMyView(Contextcontext,?@NullableAttributeSetattrs)?{

super(context,attrs);

init();

}

publicMyView(Contextcontext,?@NullableAttributeSetattrs,intdefStyleAttr)?{

super(context,attrs,defStyleAttr);

init();

}

publicMyView(Contextcontext,?@NullableAttributeSetattrs,intdefStyleAttr,intdefStyleRes)?{

super(context,attrs,defStyleAttr,defStyleRes);

init();

}

publicvoidinit()?{

/*

*對畫筆進行初始化,進行各種設置

*/

mPaint=newPaint();

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeWidth(5);

mPaint.setColor(Color.BLUE);

hexPaint=newPaint();

hexPaint.setStyle(Paint.Style.STROKE);

hexPaint.setColor(Color.GRAY);

poPaint=newPaint();

poPaint.setStyle(Paint.Style.FILL);

poPaint.setColor(getResources().getColor(R.color.red));

poPaint.setStrokeWidth(5);

poPaint.setAlpha(100);

}

@Override

protectedvoidonDraw(Canvascanvas)?{

/*

*畫圖

*/

floatwidth=getWidth();

floatheight=getHeight();

super.onDraw(canvas);

datas.add((float)300);

datas.add((float)300);

datas.add((float)300);

datas.add((float)300);

datas.add((float)300);

datas.add((float)300);

canvas.translate(width/2,height/2);

PathLpath=newPath();

drawRad(Lpath,canvas,mPaint);

canvas.rotate(-120);//坐標系復位

canvas.scale(1,-1);//坐標系復位

//drawHex(canvas,?hexPaint,?300);

for(inti=0;i<7;i++)?{

drawHex(canvas,hexPaint,i*50);

canvas.rotate(-30);//坐標系復位

canvas.translate(-i*50,0);//坐標系復位

canvas.rotate(60);//坐標系復位

}

for(inti=0;i<5;i++)?{

canvas.drawLine((float)?(datas.get(i)*Math.cos(i*Math.PI/3)),?(float)?(datas.get(i)*Math.sin(i*Math.PI/3))

,?(float)?(datas.get(i+1)*Math.cos((i+1)*Math.PI/3)),?(float)?(datas.get(i+1)*Math.sin((i+1)*Math.PI/3)),poPaint);

}

canvas.drawLine((float)?(datas.get(5)*Math.cos(-Math.PI/3)),?(float)?(datas.get(5)*Math.sin(-Math.PI/3))

,?(float)?(datas.get(0)*Math.cos(6*Math.PI/3)),?(float)?(datas.get(0)*Math.sin(6*Math.PI/3)),poPaint);

}

publicvoidsetDatas(ArrayListdatas)?{

/*

*設置數(shù)據(jù)進行重繪

*/

this.datas=datas;

invalidate();

}

privatevoiddrawHex(Canvascanvas,Paintpaint,intx)?{

canvas.translate(x,0);

canvas.rotate(30);

canvas.drawLine(0,0,0,x,paint);

for(inti=0;i<5;i++)?{

canvas.translate(0,x);

canvas.rotate(60);

canvas.drawLine(0,0,0,x,paint);

}

}

privatevoiddrawRad(Pathpath,Canvascanvas,Paintpaint)?{

path.moveTo(-300,0);

path.lineTo(300,0);

canvas.drawPath(path,paint);

canvas.rotate(60);

canvas.drawPath(path,paint);

canvas.rotate(60);

canvas.drawPath(path,paint);

}

}

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

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

  • 版權聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉載 前言 Canvas 本意是畫布的意思,然而將它理解為繪制工具一...
    cc榮宣閱讀 41,788評論 1 47
  • 前言: 在接觸Android這么長時間,看到很多大牛都在和大家分享自己的知識,深有體會,剛好前段時間寫了一個Dem...
    楊艷偉閱讀 1,388評論 0 5
  • 效果圖如下: 一。view的組成 看到上圖效果,大概可以確定這個view由三部分組成 1.繞一圈的正方形 2.中間...
    小鄭閱讀 504評論 0 0
  • 應用場景:制式、非制式培訓中團隊建設環(huán)節(jié),巧妙快速打破堅冰 項目性質(zhì):破冰船/人際關系/分組技巧 活動時間:5分鐘...
    7b54eff56068閱讀 548評論 0 1
  • UITextField控件在登錄注冊這類填表的頁面中常常用到,這里討論采用的幾個體驗點 鍵盤的收起 scrollV...
    太郎君閱讀 339評論 0 0

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