




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在android中使用Path繪制一個(gè)多邊形
今天就跟大家聊聊有關(guān)如何在android中使用Path繪制一個(gè)多邊形,可能很多人都不太了解,為了讓大家更加了解,在下給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。package
.pathview;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.graphics.Color;
import
android.graphics.Paint;
import
android.util.AttributeSet;
import
android.view.View;
/**
*
繪制多邊形
*/
public
class
PathmMultiView
extends
View
{
private
Paint
paint;
public
PathmMultiView(Context
context)
{
this(context,null);
}
public
PathmMultiView(Context
context,
AttributeSet
attrs)
{
this(context,
attrs,0);
}
public
PathmMultiView(Context
context,
AttributeSet
attrs,
int
defStyleAttr)
{
super(context,
attrs,
defStyleAttr);
initPaint();
}
private
void
initPaint()
{
paint
=
new
Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setTextSize(24);
}
@Override
protected
void
onDraw(Canvas
canvas)
{
super.onDraw(canvas);
paint.setColor(Color.GREEN);
canvas.drawText("杭州是個(gè)美麗的城市",20,20,paint);
paint.setColor(Color.RED);
canvas.drawPoint(100,100,paint);
canvas.translate(100,100);
paint.setColor(Color.BLUE);
canvas.drawText("杭州是個(gè)美麗的城市",0,0,paint);
}
}效果:上面的紅點(diǎn)是坐標(biāo)點(diǎn)(100,100)的位置,為什么繪制的藍(lán)色的文字是在坐標(biāo)點(diǎn)(100,100)的位置呢?是因?yàn)槟鉩anvas使用了translate(100,100)也就是x,y坐標(biāo)都平移了100px,這個(gè)是根據(jù)你當(dāng)前的view的左上角坐標(biāo)為原點(diǎn)進(jìn)行平移的,平移肯定是相對(duì)那個(gè)點(diǎn)進(jìn)行平移的,不人為的去設(shè)置畫布的顏色,默認(rèn)都是透明的,否則你draw...2次,上次繪制的內(nèi)容就被覆蓋了,文字太蒼白無(wú)力,就好像你對(duì)一個(gè)女孩說一千篇我愛你,還不如說你在杭州買了套房來(lái)的實(shí)際,就好像香港有一個(gè)電影中的臺(tái)詞是這么說的,這是一個(gè)最好的時(shí)代,也是一個(gè)最壞的時(shí)代,好了廢話不多說,圖,我要圖!關(guān)于如何恢復(fù)畫布有三種情況就以平移例子來(lái)講第一種:你x,y平移了多少后,我們知道x>0是向右平移,x<0是向左平移,那么恢復(fù)就很簡(jiǎn)單了canvas.translate(-x,-y)@Override
protected
void
onDraw(Canvas
canvas)
{
super.onDraw(canvas);
paint.setColor(Color.GREEN);
canvas.drawText("杭州是個(gè)美麗的城市",20,20,paint);
paint.setColor(Color.RED);
canvas.drawPoint(100,100,paint);
canvas.translate(100,100);
paint.setColor(Color.BLUE);
canvas.translate(-100,-100);
canvas.drawText("杭州是個(gè)美麗的城市",20,20,paint);
}效果:你會(huì)發(fā)現(xiàn)綠色和藍(lán)色是重疊了。第二種:配套使用canvas.save()canvas.restore();save()是綁定畫布,restore()是讓畫布恢復(fù)到最初的狀態(tài)@Override
protected
void
onDraw(Canvas
canvas)
{
super.onDraw(canvas);
paint.setColor(Color.GREEN);
canvas.save();
canvas.drawText("杭州是個(gè)美麗的城市",20,20,paint);
paint.setColor(Color.RED);
canvas.drawPoint(100,100,paint);
canvas.translate(100,100);
paint.setColor(Color.BLUE);
canvas.restore();
canvas.drawText("杭州是個(gè)美麗的城市",20,20,paint);
}效果:第三種:int
count
=
canvas.save(Canvas.MATRIX_SAVE_FLAG);//這個(gè)看你是在canvas.draw...哪里調(diào)用了,就相當(dāng)于保存畫布
canvas.restoreToCount(count);//恢復(fù)畫圖:現(xiàn)在講下畫多邊形,先確定下思路:1:把這個(gè)多邊形的外切圓畫出來(lái)當(dāng)做一個(gè)輔助的參考目標(biāo),2:計(jì)算多個(gè)點(diǎn)的坐標(biāo)然后連接成一條線如圖分析:現(xiàn)在根據(jù)這個(gè)思路把代碼實(shí)現(xiàn)下:代碼如下:package
.pathview;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.graphics.Color;
import
android.graphics.Paint;
import
android.graphics.Path;
import
android.util.AttributeSet;
import
android.view.View;
/**
*
繪制多邊形
*/
public
class
PathmMultiView
extends
View
{
private
Paint
paint;
private
Path
path;
private
int
width,height;
public
PathmMultiView(Context
context)
{
this(context,null);
}
public
PathmMultiView(Context
context,
AttributeSet
attrs)
{
this(context,
attrs,0);
}
public
PathmMultiView(Context
context,
AttributeSet
attrs,
int
defStyleAttr)
{
super(context,
attrs,
defStyleAttr);
initPaint();
}
private
void
initPaint()
{
width
=
400;
height
=
400;
path
=
new
Path();
paint
=
new
Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected
void
onMeasure(int
widthMeasureSpec,
int
heightMeasureSpec)
{
setMeasuredDimension(width,height);
}
@Override
protected
void
onDraw(Canvas
canvas)
{
super.onDraw(canvas);
drawMultShape(canvas,6,width/2);
}
/**
*
@param
canvas
畫布
*
@param
count
繪制幾邊形
*
@param
radius
//外圓的半徑
*/
public
void
drawMultShape(Canvas
canvas,int
count,float
radius){
canvas.translate(radius,radius);//
if(count<5){
return;
}
for
(int
i=0;i<count;i++){
if
(i==0){
path.moveTo(radius*cos(360/count*i),radius*sin(360/count*i));//繪制起點(diǎn)
}else{
path.lineTo(radius*cos(360/count*i),radius*sin(360/count*i));
}
}
paint.setStrokeWidth(3);
path.close();
paint.setColor(Color.GREEN);
canvas.drawPath(path,paint);
//因?yàn)槲蚁旅娌辉倮L制內(nèi)容了
所以畫布就不恢復(fù)了
}
float
sin(int
num){
return
(float)
Math.sin(num*Math.PI/180);
}
float
cos(int
num){
return
(float)
Math.cos(num*Math.PI/180);
}
}效果:哪繪制正8變形呢?好說,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水閣楊梅山施工方案
- 廣告門頭施工方案
- 石材粘接施工方案
- 火燒板臺(tái)階施工方案
- 橋梁亮化工程施工方案
- 室外管道安裝施工方案
- TSJNX 002-2024 西安市水平衡測(cè)試報(bào)告編制規(guī)范
- 二零二五年度物流信息承運(yùn)合同模板
- 二零二五年度承攬合同中增值稅稅率變動(dòng)應(yīng)對(duì)策略
- 二零二五年度交通事故人傷賠償公益援助協(xié)議
- 《moldflow學(xué)習(xí)資料》課件
- 2024建筑施工安全生產(chǎn)隱患識(shí)別圖合集
- 2025年江蘇南京技師學(xué)院招聘工作人員19人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)移動(dòng)安徽分公司春季社會(huì)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024阿里巴巴云計(jì)算云主機(jī)租賃及運(yùn)維服務(wù)合同2篇
- 湖南省對(duì)口招生考試醫(yī)衛(wèi)專業(yè)試題(2024-2025年)
- 高技能人才培訓(xùn)基地 建設(shè)項(xiàng)目實(shí)施方案
- 消毒供應(yīng)中心禮儀培訓(xùn)
- 微信公眾號(hào)運(yùn)營(yíng)步驟
- 2024年河南省中職對(duì)口升學(xué)高考語(yǔ)文試題真題(解析版)
- 2023年貴州貴州貴安發(fā)展集團(tuán)有限公司招聘筆試真題
評(píng)論
0/150
提交評(píng)論