當前位置:首頁 » 安卓系統 » android的canvas

android的canvas

發布時間: 2022-07-12 10:10:19

Ⅰ android Canvas繪制的圖形(如:圓),如何實現繪制完後還能編輯

Canvas有很多方法,比如
Canvas.translate(float dx, float dy) 平移
Canvas.rotate(float degrees, float px, float py) 旋轉
還有狀態的保存與恢復,還可以使用 Matrix 來做自定義變換。

Ⅱ android canvas怎麼創建

工具/原料

電腦(windows)
eclipse+android編程環境
方法/步驟

首先新建一個android項目名字為CanvasShow,其餘參數可以自己配置,點擊完成,形成項目信息

配置main.xml,在這里main.xml 基本不用修改,只需增加
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/root"
>
</LinearLayout>

CanvasShowInfo中實現方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init() {
LinearLayout layout=(LinearLayout) findViewById(R.id.root);
final CanvasDraw view=new CanvasDraw(this);
view.setMinimumHeight(500);
view.setMinimumWidth(300);
//通知view組件重繪 這個很重要!
view.invalidate();
layout.addView(view);

}
那麼CanvasDraw.java中實現了什麼呢?

聲明CanvasDraw.java 繼承View,重寫其中的onDraw方法。
比如畫圓:
// 創建畫筆
Paint p = new Paint();
p.setColor(Color.RED);// 設置紅色
canvas.drawText("畫圓:", 10, 20, p);// 畫文本
canvas.drawCircle(40, 40, 15, p);// 分別是 圓心的x,y坐標,15為半徑
p.setAntiAlias(true);// 設置畫筆的鋸齒效果。 true是去除,大家一看效果就明白了
canvas.drawCircle(100, 120, 50, p);// 分別是 圓心的x,y坐標,50為半徑
從圖中可以看見,去除鋸齒的圖形更加圓滑。下面是相對應的效果圖

canvas.drawText("畫矩形:", 10, 90, p);
p.setColor(Color.BLUE);// 設置灰色
p.setStyle(Paint.Style.FILL);//設置填滿
canvas.drawRect(60, 60, 80, 80, p);// 正方形
canvas.drawRect(70, 90, 300, 100, p);// 長方形
// drawRect函數前兩個參數是一個頂點的坐標,後兩個參數是對頂點的坐標,相對應的效果圖

canvas.drawText("畫扇形:", 120, 120, p);
// 設置漸變色 這個扇形的顏色是改變的 /
Shader mShader = new LinearGradient(0, 0, 100, 100,
new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW,
Color.LTGRAY }, null, Shader.TileMode.REPEAT); // 一個材質,打造出一個線性梯度沿著一條線。
p.setShader(mShader);
p.setColor(Color.BLUE);
RectF oval2 = new RectF(60, 100, 200, 240);// 設置個新的長方形,掃描測量
canvas.drawArc(oval2, 200, 130, true, p);
// 畫弧,第一個參數是RectF:該類是第二個參數是角度的開始,第三個參數是多少度,第四個參數是真的時候畫扇形,是假的時候畫弧線

其中:
public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
oval :指定圓弧的外輪廓矩形區域。
startAngle: 圓弧起始角度,單位為度。
sweepAngle: 圓弧掃過的角度,順時針方向,單位為度。
useCenter: 如果為True時,在繪制圓弧時將圓心包括在內,通常用來繪制扇形。
paint: 繪制圓弧的畫板屬性,如顏色,是否填充等。

Ⅲ android canvas 是像素嗎

Canvas : 畫布對象,相當於現實生活中畫圖用的 『紙 或 布』。
下面介紹來自於android學習手冊,android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,排在第三、四個。
Android畫圖最基本的三個對象(Color,Paint,Canvas)
三個類都存放在 android.graphics包下
1) Color :顏色對象,相當於現實生活中的 『調料』
2) Paint : 畫筆對象,相當於現實生活中畫圖用的 『筆』————主要的還是對『畫筆』進行設置
3) Canvas : 畫布對象,相當於現實生活中畫圖用的 『紙 或 布』
三者相結合,就能畫出基本的圖形

Ⅳ Android canvas 如何繪制字體大小為25的一行文本

Canvas相當於畫布,字體的大小格式在Paint上設置才正確, Paint 相當於畫筆。代碼如下,沒有具體參數:希望能幫到你 Paint paint = new Paint(); paint.setTextSize(textSize);//設置字體大小 paint.setTypeface(typeface);//設置字體類型

Ⅳ android:如何用canvas在自定義view里畫圖

做安卓開發的話,不會自定義view是不行的,自定定義各種控制項以滿足開發需求,在開發中是很重要的,自定義view通過繼承view,通過重寫ondraw方法實現重繪自己所需要的控制項樣式。
在ondraw方法中,通過canvas來繪制想要的樣式,首先需要定義好畫筆,以及畫筆的各種屬性,比如需要的時候要
抗鋸齒
等等。都准備好了就可以用canvas來實現繪圖了,當然api提供的api肯定是不夠用的,需要多姿多彩的樣式很多時候需要藉助准備好的一些圖片,通過canvas繪制bitmap來實現把准備好的圖片繪制上去。繪制好了當然還是不夠的,控制項都是需要和用戶交互的,所以很多時候樣式是會發生改變的,所以要在其中定義相關方法暴露出來,方法中處理用戶操作或其他的結果改變樣式的重繪,繪制好了調用更新(
invalidate
())方法,實現樣式的改變。做好一個控制項還需要優化性能等等,都需要一步一慢慢實現。

Ⅵ android怎麼移動canvas

我們可以把這個Canvas理解成系統提供給我們的一塊內存區域(但實際上它只是一套畫圖的API,真正的內存是下面的Bitmap),而且它還提供了一整套對這個內存區域進行操作的方法,所有的這些操作都是畫圖API。也就是說在這種方式下我們已經能一筆一劃或者使用

Graphic來畫我們所需要的東西了,要畫什麼要顯示什麼都由我們自己控制。
這種方式根據環境還分為兩種:一種就是使用普通View的canvas畫圖,還有一種就是使用專門的SurfaceView的canvas來畫圖。兩種的主要是區別就是可以在SurfaceView中定義一個專門的線程來完成畫圖工作,應用程序不需要等待View的刷圖,提高性能。前面一種適合處理量比較小,幀率比較小的動畫,比如說象棋游戲之類的;而後一種主要用在游戲,高品質動畫方面的畫圖。

Paint 代表了Canvas上的畫筆、畫刷、顏料等等;
Paint類常用方法:
setARGB(int a, int r, int g, int b) // 設置 Paint對象顏色,參數一為alpha透明值
setAlpha(int a) // 設置alpha不透明度,范圍為0~255
setAntiAlias(boolean aa) // 是否抗鋸齒
setColor(int color) // 設置顏色,這里Android內部定義的有Color類包含了一些常見顏色定義
setTextScaleX(float scaleX) // 設置文本縮放倍數,1.0f為原始
setTextSize(float textSize) // 設置字體大小
setUnderlineText(booleanunderlineText) // 設置下劃線

// 1、將會以顏色ARBG填充整個控制項的Canvas背景
//mCanvas.drawARGB(122, 10, 159, 163) ;
// 2、將會以顏色ARBG填充整個控制項的Canvas背景
//mCanvas.drawColor(Color.BLUE) ;
// 3、繪制顏色,但是要制定一個mode
//mCanvas.drawColor(Color.BLUE, Mode.SCREEN) ;
// 4、畫背景,跟2等效
//mCanvas.drawPaint(mPaint) ;
// 5、畫一個點
//mCanvas.drawPoint(23, 23, mPaint) ;
// 6、畫很多點這里的float[] 表示{x0,y0,x1,y1,x2,y2,x3,y3.....}
//mCanvas.drawPoints(new float[]{10,11,10,12,10,13,10,14,10,15,10,16}, mPaint) ;
// 7、畫線
//mCanvas.drawLine(...) ;
// 8、畫長方形 Rect 和RectF的區別?
//精度不一樣,Rect是使用int類型作為數值,RectF是使用float類型作為數值
//Rect r = new Rect(10,10,50,50) ;
//mCanvas.drawRect(r, mPaint) ;
//RectF rf = new RectF(10,10,50,50) ;
//mCanvas.drawRect(rf, mPaint) ;
//mCanvas.drawRect(10, 10, 50, 50, mPaint) ;
// 9、畫橢圓 初始化RectF的參數是(left,top,right,bottom)
//RectF rf = new RectF(100,100 ,200 ,250) ;
//mCanvas.drawOval(rf, mPaint) ;
// 10、畫圓 (圓心x0,圓心y0,半徑,paint)
//mCanvas.drawCircle(100, 100, 50, mPaint) ;
// 11、畫圓弧 RectF對象表明內切矩形的(left,top,right,bottom)
//RectF rf = new RectF(100 ,100 ,200 ,200) ;
// 參數(rf,startAngle ,angle ,sweepAngle ,paint) sweepAngle表明是否顯示圓弧三角形 angle畫多少度
//mCanvas.drawArc(rf, 60, 30, true, mPaint) ;
// 12、繪制圓角矩形 RectF是矩形的(left,top,right,bottom)
//RectF rf = new RectF(100 ,100 ,200 ,200) ;
// 50表明x方向的半徑,20表示y方向的半徑
//mCanvas.drawRoundRect(rf, 50, 20, mPaint) ;
// 13、畫任意多邊形
//Path path = new Path() ;
//path.moveTo(100, 100) ;
//path.lineTo(200, 200) ;
//path.lineTo(300, 200) ;
//mCanvas.drawPath(path, mPaint) ;
// 14、通過Path對象,也可以畫其他的圖形
//Path path = new Path() ;
//path.addCircle(100, 100, 20, Path.Direction.CCW) ;
//mCanvas.drawPath(path ,mPaint);

/*drawBitmap
drawText
drawPicture*/

/*Rect r = new Rect(100,100,200,200) ;
ByteArrayOutputStream out = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg) ;
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out) ;
InputStream in = new ByteArrayInputStream(out.toByteArray()) ;
*/
/*Picture picture = Picture.createFromStream(mContext.getResources().openRawResource(R.raw.bg)) ;
mCanvas.drawPicture(picture) ;*/

// 15、畫bitmap對象
//mCanvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg),100, 100, mPaint) ;

// 16、Matrix中包含了對Bitmap的處理操作
/*Matrix m = new Matrix() ;
m.postScale(2, 2) ;
m.postRotate(60) ;
mCanvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg), m, mPaint) ;*/

// 17、畫帶Matrix參數的bitmap,經過Matrix對象可以對bitmap做相關的處理,比如旋轉,縮放,移動等《關於Matrix的使用另行總結》
/*Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg) ;
Matrix m = new Matrix() ;
m.postScale(2, 2) ;
m.postRotate(60) ;
m.postTranslate(300, 300) ;
mCanvas.drawBitmap(bitmap, m, mPaint) ;*/
//mCanvas.drawBitmap(....) ; 暫不總結
// 18、畫文字
//mCanvas.drawText(123, 10, 10, mPaint) ;

//mCanvas.drawText(....)

Ⅶ android canvas是按像素畫的嗎

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

Ⅷ android 使用canvas畫線,如何保證快速畫出圓滑的曲線

[mw_shl_code=java,true] RectF rect = new RectF(0, 0, radii, radii); // 圓形弧度需要的區域(左上角的x,y坐標 ,及右下角x,y坐標) Paint paint = new Paint(); paint.setColor(r.getColor(R.color.bg_color_1)); canvas.drawCircle(radii/2, radii/2, radii/2, paint);[/mw_shl_code]

Ⅸ android canvas的drawText方法 如何設置字體大小和格式。

Canvas相當於畫布,字體的大小格式在Paint上設置才正確, Paint 相當於畫筆。代碼如下,沒有具體參數:

Paint paint = new Paint();

paint.setTextSize(textSize);//設置字體大小

paint.setTypeface(typeface);//設置字體類型

canvas.drawText(text, x, y, paint);//使用畫筆paint

@Override

public void onDraw (Canvas canvas) {

Rect targetRect = new Rect(50, 50, 1000, 200);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setStrokeWidth(3);

paint.setTextSize(80);

String testString = "測試:ijkJQKA:1234";

paint.setColor(Color.CYAN);

canvas.drawRect(targetRect, paint);

paint.setColor(Color.RED);

FontMetricsInt fontMetrics = paint.getFontMetricsInt();

(9)android的canvas擴展閱讀:

Screen Space - Camera

此模式類似Screen Space - Overlay,但區別是此模式將Canvas放置於某個Camera前固定距離。此Camera負責渲染所有UI元素,則攝像機參數(Camera Settings)直接影響UI表現。

比如Camera是透視模式(Perspective),則UI元素會基於Field of View的值而扭曲變形。同樣的,若屏幕解析度變更,或者視覺平截體(CameraFrustrum)改變,則Canvas自動調整自身尺寸作自適應。

Ⅹ Android自定義控制項復寫onDraw(Canvas canvas),canvas是怎樣獲取的

ViewRootImpl.java中

如果是軟體繪制的話,drawSoftWare方法會調用view.draw()方法。

從上圖中可以看到canvas來源於mSurface.lockCanvas。這里會調用到native層,簡單點說就是去申請了一塊buffer。這個時候canvas就可以用了,接下來就會調用view.draw方法。

具體點的過程自己可以去看看。

熱點內容
android數字滾動 發布:2025-01-28 10:18:51 瀏覽:565
dag見證伺服器是虛擬ip嗎 發布:2025-01-28 10:07:04 瀏覽:605
dz上傳的圖片不顯示 發布:2025-01-28 09:37:42 瀏覽:887
joinsql多表 發布:2025-01-28 09:23:26 瀏覽:729
php數組循環賦值 發布:2025-01-28 09:23:25 瀏覽:134
android42系統 發布:2025-01-28 09:21:59 瀏覽:902
菜單設計c語言 發布:2025-01-28 09:21:54 瀏覽:274
sql多表查詢優化 發布:2025-01-28 09:21:05 瀏覽:503
iphone6便捷訪問 發布:2025-01-28 09:05:11 瀏覽:177
四位驗證密碼是多少 發布:2025-01-28 08:56:13 瀏覽:809