導航:首頁 > 操作系統 > androidcanvas扇形

androidcanvas扇形

發布時間:2024-08-16 20:54:32

android canvas.drawbitmap(bitmap,0,0,null)什麼意思

你是要實現圖畫功能的吧?這個很簡單理解。

canvas.drawbitmap()函數你可以理解為新建一個畫布, 就好比畫家的畫板,當然你不往裡面添加東西,就什麼都沒有,它是空的。現在放入參數, bitmap就是導入你已有的圖片,比如,畫家上次還沒畫完的一張圖片,現在放在畫板上,要繼續工作。參數,0,0,為設置這張畫在畫板上的放置的位置,0,0為x軸和y軸的坐標,如果是(0,0),則默認為從從左上角開始放置。下面的一張圖片為設置不同參數的時候,這種那個圖片放置在這個畫板上的位置的變化,你可以看到我設置為(100,10),也就是x坐標100,圖片離左邊距離為100;y坐標10,圖片離上方距離為10,你可以看到左邊黑色的部分佔了100,上邊部分的黑色佔了10.最後,就是那個null,null的參數是用來設置畫筆的,你沒有畫筆,當然就不用設了,你這個只是簡單的,見圖片顯示在畫板上,並沒有實現要在畫板上畫圖的功能 。你還想實現美妙顯示多少張圖片的話,我只能給你指示簡單的方向,就是你要設置一個定時器,在定時器裡面,加上你的這個函數,然後定時更改參數bitmap變數,這個bitmap是圖片的路徑,實現實現每秒多少貞,就是要設置定時器你每秒,你改變參數bitmap的頻率,關於這個問題,你還得學習下定時器,再說下去內容就多了,你還是自己先琢磨吧……
ps:其實這個函數還比較好理解,不好理解的是要開始實現畫圖的時候,要設置兩個這樣的,實現雙緩沖,這個比較難,多看看書吧,我也只能幫你到這里了。祝你學習快樂哈~我也正在學習。

㈡ android 上用canvas繪圖之後,我想清除怎麼辦

canvas繪圖是在onDraw里觸發的。而每次onDraw的時候,其實是重新繪制canvas數據的,也就是如果你什麼都不畫,canvas上就沒有東西了。因此你只要在每次觸發onDraw之後,把需要畫的內容畫出來即可。比如,假設人頭的數據是bitmapHead,兩種發型分別是bitmapStyle1, bitmapStyle 2,你就可以這樣畫(偽代碼):

java">intcurrentType=0;
onDraw(canvas){
canvas.draw(bitmapHead);//這個是必定要畫的
switch(currentType){
caseSTYLE1:
canvas.draw(bitmapStyle1);
break;
caseSTYLE2:
canvas.draw(bitmapStyle2);
break;
}
}

㈢ DrawArc()方法如何使用

安卓方法DrawArc()用於在畫布上繪制圓弧,主要方法是通過指定圓弧所在的橢圓對象、起始角度、終止角度來實現。

1. 基本語法:

public void drawArc (RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

參數說明

oval:圓弧所在的橢圓對象。

startAngle:圓弧的起始角度。

sweepAngle:圓弧的角度。

useCenter:是否顯示半徑連線,true表示顯示圓弧與圓心的半徑連線,false表示不顯示。

paint:繪制時所使用的畫筆。

注意:Rect類使用需要小心,詳見文末附註。

2. 示例

以下代碼示範了如何在畫布上繪制圓弧:

protectedvoidonDraw(Canvascanvas){ //TODOAuto-generatedmethodstub super.onDraw(canvas); paint.setAntiAlias(true);//設置畫筆為無鋸齒 paint.setColor(Color.BLACK);//設置畫筆顏色 canvas.drawColor(Color.WHITE);//白色背景 paint.setStrokeWidth((float)3.0);//線寬 paint.setStyle(Style.STROKE); RectFoval=newRectF();//RectF對象 oval.left=100;//左邊 oval.top=100;//上邊 oval.right=400;//右邊 oval.bottom=300;//下邊 canvas.drawArc(oval,225,90,false,paint);//繪制圓弧 //RectFoval=newRectF();//RectF對象 oval.left=100;//左邊 oval.top=400;//上邊 oval.right=400;//右邊 oval.bottom=700;//下邊 canvas.drawArc(oval,200,135,true,paint);//繪制圓弧 }

代碼中,首先設置了Paint畫筆的顏色,並設置Canvas畫布為白色背景。接著設置畫筆的線寬以及空心效果。然後,定義一個RectF對象,並設置了坐標,調用drawArc方法繪制第一個圓弧,此處設置為不顯示半徑連線。最後,重新設置了RectF對象坐標,調用drawArc方法繪制第二個圓弧,此例顯示半徑連線。運行代碼,可在手機屏幕上看到下圖圖所示顯示效果。

---------------

附註:

Android中的Rect類——奇葩的思維

最近在工作中遇到了一些問題,總結下來就是Android中Rect這個類造成的。不得不說,不知道Android SDK的開發人員是怎麼想的, 這個類設計的太奇葩了。首先介紹一下Rect類:Rect類主要用於表示坐標系中的一塊矩形區域,並可以對其做一些簡單操作。這塊矩形區域,需要用左上右下兩個坐標點表示(left,top,right,bottom),你也可以獲取一個Rect實例的Width和Height。就在這里,奇葩的事情來了,作為一個有一點經驗的做圖像或者矩陣運算或者編程程序員來說,大家的共識是,如果一個矩陣是MxN的,也就是M行N列,那麼行號是[0,M-1],列號是[0,N-1]。可是奇葩的Rect類並不是這樣的!如果你這么聲明一個Rect類:

Rect rect=newRect(100,50,300,500);

那麼右下角(300,500)其實是不在這個矩形裡面的,但是左上角(100,50)在,也就是說,這個矩形實際表示的區域是:(100,50,299,499)。另外,Rect計算出的Height和Width倒是對的。所以,在此告誡各位程序員,在涉及Rect運算的時候,盡量不要使用它的右下角左邊,即right和bottom。因為他們是錯的。當然,在你調用android自己的函數時,是可以使用的,因為Android裡面一直保持這么奇葩的思維。

㈣ Android繪圖之Canvas變換(6)

前面講解了Canvas的基本概念, Android繪圖之Canvas概念理解(5) ,
對Canvas的概念進行了分析,但是沒有說明和屏幕的關系,Canvas不等於屏幕,屏幕不會動的,我們也無法對屏幕進行(平移,縮放等)操作,只能對Canvas進行操作,所以對Canvas進行操作,屏幕不動,最終會導致看到的圖像不同。

下面開始講解Canvas的變幻操作:
包括:translate,rotate,scale,skew,clip,clipout,matrix

先從最簡單的平移開始:

對Canvas進行平移,
dx: x軸方向進行平移,正值向屏幕右側
dy:y軸方向進行平移,正值向屏幕下方

繪制兩個點查看原點位置。

原點顯然改變了,以後再繪制任何形狀都是以translate後的原點開始繪制。

參數說明
sx:橫向的縮放,默認為1,小數縮小,整數放大
sy:縱向的縮放,默認為1,小數縮小,整數放大

px,py,看源碼知道是先translate,執行sx,sy然後再translate反方向。
第二次translate的坐標為(-px sx,-px sy),最終的效果就是px,py是縮放後不動的點。

縮放後坐標減半。

如果想控制縮放後的位置,如何控制呢,這就需要第二個函數。

還可以控制其他位置,例如控制縮放後在中心。

rotate有兩個函數:
rotate(float degrees)
rotate(float degrees, float px, float py)
Degree:旋轉的角度,正值為順時針,負值為逆時針
Px,py:旋轉的中心,如果不指定旋轉中心默認為(0,0)點

指定旋轉中心為矩形中心

參數說明:
sx:畫布在x方向上傾斜相應的角度,sx傾斜角度的tan值,
sy:畫布在y軸方向上傾斜相應的角度,sy為傾斜角度的tan值,

根據矩形或者路徑裁剪畫布,畫布被切割之後,只有部分區域可用,其他區域無法繪制內容。
Clip函數切割的區域可用,clipOut未被切割的區域可用。(過時函數不再講解)

Matrix提供了一些方法來控制變換:

android繪圖之Paint(1)
android繪圖之Canvas基礎(2)
Android繪圖之Path(3)
Android繪圖之drawText繪制文本相關(4)
Android繪圖之Canvas概念理解(5)
Android繪圖之Canvas變換(6)
Android繪圖之Canvas狀態保存和恢復(7)
Android繪圖之PathEffect (8)
Android繪圖之LinearGradient線性漸變(9)
Android繪圖之SweepGradient(10)
Android繪圖之RadialGradient 放射漸變(11)
Android繪制之BitmapShader(12)
Android繪圖之ComposeShader,PorterDuff.mode及Xfermode(13)
Android繪圖之drawText,getTextBounds,measureText,FontMetrics,基線(14)
Android繪圖之貝塞爾曲線簡介(15)
Android繪圖之PathMeasure(16)
Android 動態修改漸變 GradientDrawable

㈤ 求Android中canvas.drawPicture(p);的使用方法求一個簡單的實例

這個可能稍微復雜一點,但是非常實用:


{


DrawingViewdv;

privatePaintmPaint;

=null;


@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

dv=newDrawingView(this);

setContentView(dv);

mPaint=newPaint();

mPaint.setAntiAlias(true);

mPaint.setDither(true);

mPaint.setColor(Color.GREEN);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeJoin(Paint.Join.ROUND);

mPaint.setStrokeCap(Paint.Cap.ROUND);

mPaint.setStrokeWidth(12);

}


{


publicintwidth;

publicintheight;

privateBitmapmBitmap;

privateCanvasmCanvas;

privatePathmPath;

privatePaintmBitmapPaint;

Contextcontext;

privatePaintcirclePaint;

privatePathcirclePath;


publicDrawingView(Contextc){

super(c);

context=c;

mPath=newPath();

mBitmapPaint=newPaint(Paint.DITHER_FLAG);

circlePaint=newPaint();

circlePath=newPath();

circlePaint.setAntiAlias(true);

circlePaint.setColor(Color.BLUE);

circlePaint.setStyle(Paint.Style.STROKE);

circlePaint.setStrokeJoin(Paint.Join.MITER);

circlePaint.setStrokeWidth(4f);


}


@Override

protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){

super.onSizeChanged(w,h,oldw,oldh);


mBitmap=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);

mCanvas=newCanvas(mBitmap);


}

@Override

protectedvoidonDraw(Canvascanvas){

super.onDraw(canvas);


canvas.drawBitmap(mBitmap,0,0,mBitmapPaint);


canvas.drawPath(mPath,mPaint);


canvas.drawPath(circlePath,circlePaint);

}


privatefloatmX,mY;

privatestaticfinalfloatTOUCH_TOLERANCE=4;


privatevoidtouch_start(floatx,floaty){

mPath.reset();

mPath.moveTo(x,y);

mX=x;

mY=y;

}

privatevoidtouch_move(floatx,floaty){

floatdx=Math.abs(x-mX);

floatdy=Math.abs(y-mY);

if(dx>=TOUCH_TOLERANCE||dy>=TOUCH_TOLERANCE){

mPath.quadTo(mX,mY,(x+mX)/2,(y+mY)/2);

mX=x;

mY=y;


circlePath.reset();

circlePath.addCircle(mX,mY,30,Path.Direction.CW);

}

}

privatevoidtouch_up(){

mPath.lineTo(mX,mY);

circlePath.reset();

//committhepathtoouroffscreen

mCanvas.drawPath(mPath,mPaint);

//killthissowedon'tdoubledraw

mPath.reset();

}


@Override

publicbooleanonTouchEvent(MotionEventevent){

floatx=event.getX();

floaty=event.getY();


switch(event.getAction()){

caseMotionEvent.ACTION_DOWN:

touch_start(x,y);

invalidate();

break;

caseMotionEvent.ACTION_MOVE:

touch_move(x,y);

invalidate();

break;

caseMotionEvent.ACTION_UP:

touch_up();

invalidate();

break;

}

returntrue;

}

}

}


你的手指到哪裡,Canvas就畫到哪裡。圖:

㈥ android中使用canvas.drawText函數可否設置旋轉

使用Paint類的breakText對Text進行分解 然後分別使用Canvas的drawText進行繪制

閱讀全文

與androidcanvas扇形相關的資料

熱點內容
程序員怒吼視頻 瀏覽:808
加密貨幣的發展情況如何 瀏覽:69
java泛型編譯原理 瀏覽:960
足球23關演算法 瀏覽:734
我的世界手機基岩版為什麼進不了伺服器 瀏覽:730
阿里雲伺服器會被經常攻擊嗎 瀏覽:483
百度雲app解壓了在哪裡 瀏覽:625
金立s10查看加密空間 瀏覽:863
自動分配ip地址是由什麼伺服器完成的 瀏覽:64
和多號app從哪裡下載 瀏覽:346
u盤加密隱藏文件 瀏覽:773
編譯原理中的句柄怎麼找 瀏覽:609
程序員1年帶800人跑山撿垃圾 瀏覽:921
小米手環5app怎麼一直連手機 瀏覽:441
勞動力供給演算法 瀏覽:395
ug編程在哪裡可以調主題 瀏覽:289
計算機圖形學演算法流程圖 瀏覽:573
java編程工資 瀏覽:124
oppo運營商app在哪裡找 瀏覽:219
手機反編譯需要的環境 瀏覽:538