導航:首頁 > 操作系統 > android創建畫布

android創建畫布

發布時間:2022-05-24 05:49:22

1. android中paint如何設置背景圖片

首先paint的作用類似於一個畫筆,你可以設置這個畫筆的粗細,顏色,軌跡的STYLE等等,paint是不能用來設置背景的。
canvas可以理解為一個畫布,你綁定一個畫筆來在這個畫布上作畫,你也可以設置這個畫布的背景,android中canvas畫圖利用的是bitmap,具體你去看看sdk中的canvas。

2. 安卓手機上的美圖秀秀怎麼建畫布

手機裡面的美圖秀秀不能新建畫布的,只有電腦上可以的。

3. 在Android畫布填充三角形嗎

1、首先說一下canvas類:
Class Overview
The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).
這個類相當於一個畫布,你可以在裡面畫很多東西;
我們可以把這個Canvas理解成系統提供給我們的一塊內存區域(但實際上它只是一套畫圖的API,真正的內存是下面的Bitmap),而且它還提供了一整套對這個內存區域進行操作的方法,所有的這些操作都是畫圖API。也就是說在這種方式下我們已經能一筆一劃或者使用Graphic來畫我們所需要的東西了,要畫什麼要顯示什麼都由我們自己控制。

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

drawRect(RectF rect, Paint paint) //繪制區域,參數一為RectF一個區域
drawPath(Path path, Paint paint) //繪制一個路徑,參數一為Path路徑對象
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) //貼圖,參數一就是我們常規的Bitmap對象,參數二是源區域(這里是bitmap),參數三是目標區域(應該在canvas的位置和大小),參數四是Paint畫刷對象,因為用到了縮放和拉伸的可能,當原始Rect不等於目標Rect時性能將會有大幅損失。
drawLine(float startX, float startY, float stopX, float stopY, Paintpaint) //畫線,參數一起始點的x軸位置,參數二起始點的y軸位置,參數三終點的x軸水平位置,參數四y軸垂直位置,最後一個參數為Paint 畫刷對象。
drawPoint(float x, float y, Paint paint) //畫點,參數一水平x軸,參數二垂直y軸,第三個參數為Paint對象。
drawText(String text, float x, floaty, Paint paint) //渲染文本,Canvas類除了上面的還可以描繪文字,參數一是String類型的文本,參數二x軸,參數三y軸,參數四是Paint對象。
drawOval(RectF oval, Paint paint)//畫橢圓,參數一是掃描區域,參數二為paint對象;

drawCircle(float cx, float cy, float radius,Paint paint)// 繪制圓,參數一是中心點的x軸,參數二是中心點的y軸,參數三是半徑,參數四是paint對象;

drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)//畫弧,
參數一是RectF對象,一個矩形區域橢圓形的界限用於定義在形狀、大小、電弧,參數二是起始角(度)在電弧的開始,
參數三掃描角(度)開始順時針測量的,參數四是如果這是真的話,包括橢圓中心的電弧,並關閉它,如果它是假這將是一個弧線,參數五是Paint對象;
還要理解一個paint類:

Class Overview
The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
paint類擁有風格和顏色信息如何繪制幾何學,文本和點陣圖。

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) // 設置下劃線
2、直接看案例
看一下效果圖:

在此案例中我們用到的是自定義view類;
CustomActivity.java

[java] view plain
public class CustomActivity extends Activity {
@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 DrawView view=new DrawView(this);
view.setMinimumHeight(500);
view.setMinimumWidth(300);
//通知view組件重繪
view.invalidate();
layout.addView(view);

}
}

重要的類自定義View組件要重寫View組件的onDraw(Canvase)方法,接下來是在該 Canvas上繪制大量的幾何圖形,點、直線、弧、圓、橢圓、文字、矩形、多邊形、曲線、圓角矩形,等各種形狀!
DrawView.java

[java] view plain
public class DrawView extends View {

public DrawView(Context context) {
super(context);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/*
* 方法 說明 drawRect 繪制矩形 drawCircle 繪制圓形 drawOval 繪制橢圓 drawPath 繪制任意多邊形
* drawLine 繪制直線 drawPoin 繪制點
*/
// 創建畫筆
Paint p = new Paint();
p.setColor(Color.RED);// 設置紅色

canvas.drawText("畫圓:", 10, 20, p);// 畫文本
canvas.drawCircle(60, 20, 10, p);// 小圓
p.setAntiAlias(true);// 設置畫筆的鋸齒效果。 true是去除,大家一看效果就明白了
canvas.drawCircle(120, 20, 20, p);// 大圓

canvas.drawText("畫線及弧線:", 10, 60, p);
p.setColor(Color.GREEN);// 設置綠色
canvas.drawLine(60, 40, 100, 40, p);// 畫線
canvas.drawLine(110, 40, 190, 80, p);// 斜線
//畫笑臉弧線
p.setStyle(Paint.Style.STROKE);//設置空心
RectF oval1=new RectF(150,20,180,40);
canvas.drawArc(oval1, 180, 180, false, p);//小弧形
oval1.set(190, 20, 220, 40);
canvas.drawArc(oval1, 180, 180, false, p);//小弧形
oval1.set(160, 30, 210, 60);
canvas.drawArc(oval1, 0, 180, false, p);//小弧形

canvas.drawText("畫矩形:", 10, 80, p);
p.setColor(Color.GRAY);// 設置灰色
p.setStyle(Paint.Style.FILL);//設置填滿
canvas.drawRect(60, 60, 80, 80, p);// 正方形
canvas.drawRect(60, 90, 160, 100, p);// 長方形

canvas.drawText("畫扇形和橢圓:", 10, 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:該類是第二個參數是角度的開始,第三個參數是多少度,第四個參數是真的時候畫扇形,是假的時候畫弧線
//畫橢圓,把oval改一下
oval2.set(210,100,250,130);
canvas.drawOval(oval2, p);

canvas.drawText("畫三角形:", 10, 200, p);
// 繪制這個三角形,你可以繪制任意多邊形
Path path = new Path();
path.moveTo(80, 200);// 此點為多邊形的起點
path.lineTo(120, 250);
path.lineTo(80, 250);
path.close(); // 使這些點構成封閉的多邊形
canvas.drawPath(path, p);

// 你可以繪制很多任意多邊形,比如下面畫六連形
p.reset();//重置
p.setColor(Color.LTGRAY);
p.setStyle(Paint.Style.STROKE);//設置空心
Path path1=new Path();
path1.moveTo(180, 200);
path1.lineTo(200, 200);
path1.lineTo(210, 210);
path1.lineTo(200, 220);
path1.lineTo(180, 220);
path1.lineTo(170, 210);
path1.close();//封閉
canvas.drawPath(path1, p);
/*
* Path類封裝復合(多輪廓幾何圖形的路徑
* 由直線段*、二次曲線,和三次方曲線,也可畫以油畫。drawPath(路徑、油漆),要麼已填充的或撫摸
* (基於油漆的風格),或者可以用於剪斷或畫畫的文本在路徑。
*/

//畫圓角矩形
p.setStyle(Paint.Style.FILL);//充滿
p.setColor(Color.LTGRAY);
p.setAntiAlias(true);// 設置畫筆的鋸齒效果
canvas.drawText("畫圓角矩形:", 10, 260, p);
RectF oval3 = new RectF(80, 260, 200, 300);// 設置個新的長方形
canvas.drawRoundRect(oval3, 20, 15, p);//第二個參數是x半徑,第三個參數是y半徑

//畫貝塞爾曲線
canvas.drawText("畫貝塞爾曲線:", 10, 310, p);
p.reset();
p.setStyle(Paint.Style.STROKE);
p.setColor(Color.GREEN);
Path path2=new Path();
path2.moveTo(100, 320);//設置Path的起點
path2.quadTo(150, 310, 170, 400); //設置貝塞爾曲線的控制點坐標和終點坐標
canvas.drawPath(path2, p);//畫出貝塞爾曲線

//畫點
p.setStyle(Paint.Style.FILL);
canvas.drawText("畫點:", 10, 390, p);
canvas.drawPoint(60, 390, p);//畫一個點
canvas.drawPoints(new float[]{60,400,65,400,70,400}, p);//畫多個點

//畫圖片,就是貼圖
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
canvas.drawBitmap(bitmap, 250,360, p);
}
}

4. Android下通過Canvas類和Paint類畫一個表格的方法的問題

Paint和Canvas類:
Paint:畫筆,使用之前首先要調整好畫筆,然後就可以在畫布上繪圖了,這樣就可以顯示在手機屏幕上。
主要方法有:setColor() 設置畫筆的顏色
setTextSize() 設置字體大小
setStyle() 設置畫筆的風格,空心還是實心
setStrokWidth() 設置空心的邊框寬度
setTextAlign() 設置文字的對齊方式
setTypeface() 設置字體,如粗細、傾斜
在設置畫筆顏色的時候,使用到了Color類,這個類定義了一些顏色常量和顏色轉換。如Color.RED、Color.GRENN等,還可以通過Color類的靜態方法rgb(int,int,int)
來定一個顏色,這三個參數的的值范圍是0~255。
Canvas:是一個畫布,可以在上面畫想要的任何東西,也可以設置畫布的一些的屬性,比如背景顏色,尺寸等。Canvas提供了一下一些方法:
方法:Canvas(),創建一個空的畫布,可以使用setBitmap()方法來設置繪制的具體畫布;
Canvas(Bitmap bitmap),以bitmap對象創建一個畫布,此時則將內容繪制在bitmap上,bitmap不得為null.
drawColor(),設置畫布的背景顏色。
drawRect(left,top,right,bottom,paint);畫矩形,前四個是float,後一個是Paint類型。
drawLine(startX,startY,stopX,stopY,paint),畫線,前四個參數是float,後一個是Paint類型。
drawText(text,x,y,paint);在畫布上畫指定的文本,x,y兩個參數是float,後一個是Paint類型。

5. android canvas一定要設置具體的畫布嗎canvas是畫在屏幕上還是畫在bitmap上求詳解

簡短的說就像text框要輸入文字一樣,你必須先讓text取得焦點,獲得游標才能進行輸入

bitmap就像畫布,canvas就像畫筆。要畫畫就要知道畫在哪裡,所以必須要畫布。
view的onDraw的canvas是花在view的背景上,也是類似bitmap上。
緩沖是在另一個後台bitmap上畫好在進行展示

以上代表個人通俗理解只做參考理解,不是標准

6. android開發問題: 在Activity主界面繪制畫布,可是它把整個窗口都覆蓋掉了,怎麼設定畫布的窗口大小呢(

你是說View占滿了整個屏幕嗎?這樣的話就只能在layout中寫一個布局文件,將View以一種組件的方式聲明到.xml文件中,然後你可以在它的上下中聲明其他的button或者textview或者ImageButton等。

7. android 我用一張圖片做畫布,要在這張圖片上畫三個矩形 可是卻只畫出一個矩形

你的方法不對,drawRect(left, top, right, bottom, paint) 這個方法本來就是畫矩形的,其中上下左右四個坐標點代表它的四個頂點。

8. 如何增加畫布大小在Android的

您可以創建所需大小的點陣圖,然後繪制它需要部分使用drawBitmap以帆布(點陣圖點陣圖,矩形SRC,矩形DST,油漆塗料)方法帆布。

9. android實現一個簡單的畫布,可以用手指畫線條。

public class DrawView extends View {
Context mycontext;
int toasttime = 1000*60;
boolean enabletoast = true;
//之前的坐標
float preX;
float preY;
//路徑
private Path path;
//畫筆
public Paint paint = null;
//默認畫布大小
public static int VIEW_WIDTH = 500;
public static int VIEW_HEIGHT = 600;
//
Bitmap cacheBitmap = null;
//
Canvas cacheCanvas = null;

public DrawView(Context context, AttributeSet set) {
super(context, set);
mycontext = context;
cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HEIGHT,
Config.ARGB_8888);
cacheCanvas = new Canvas();

path = new Path();
cacheCanvas.setBitmap(cacheBitmap);

paint = new Paint(Paint.DITHER_FLAG);
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
paint.setAntiAlias(true);
paint.setDither(true);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(x, y);
preX = x;
preY = y;
break;
case MotionEvent.ACTION_MOVE:
path.quadTo(preX, preY, x, y);
preX = x;
preY = y;
break;
case MotionEvent.ACTION_UP:
cacheCanvas.drawPath(path, paint);
path.reset();
if(enabletoast == false){

}
break;
}
invalidate();
return true;
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint bmpPaint = new Paint();
canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);
canvas.drawPath(path, paint);
}

}

10. android怎麼生成bitmap

1、

[java] view plain
public Bitmap convertViewToBitmap(View view){

Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
Bitmap.Config.ARGB_8888);
//利用bitmap生成畫布
Canvas canvas = new Canvas(bitmap);

//把view中的內容繪制在畫布上
view.draw(canvas);

return bitmap;
}

2、

[java] view plain
/**
* save view as a bitmap
*/
private Bitmap saveViewBitmap(View view) {
// get current view bitmap
view.setDrawingCacheEnabled(true);
view.buildDrawingCache(true);
Bitmap bitmap = view.getDrawingCache(true);

Bitmap bmp = plicateBitmap(bitmap);
if (bitmap != null && !bitmap.isRecycled()) { bitmap.recycle(); bitmap = null; }
// clear the cache
view.setDrawingCacheEnabled(false);
return bmp;
}

public static Bitmap plicateBitmap(Bitmap bmpSrc)
{
if (null == bmpSrc)
{ return null; }

int bmpSrcWidth = bmpSrc.getWidth();
int bmpSrcHeight = bmpSrc.getHeight();

Bitmap bmpDest = Bitmap.createBitmap(bmpSrcWidth, bmpSrcHeight, Config.ARGB_8888); if (null != bmpDest) { Canvas canvas = new Canvas(bmpDest); final Rect rect = new Rect(0, 0, bmpSrcWidth, bmpSrcHeight);

canvas.drawBitmap(bmpSrc, rect, rect, null); }

return bmpDest;
}

閱讀全文

與android創建畫布相關的資料

熱點內容
沒有滴滴app怎麼打車 瀏覽:100
大數乘法java 瀏覽:1000
如何登錄伺服器看源碼 瀏覽:524
如何做伺服器端 瀏覽:156
注冊伺服器地址指什麼 瀏覽:433
文本命令行 瀏覽:97
撲克牌睡眠解壓 瀏覽:193
rc4演算法流程圖 瀏覽:159
胡蘿卜解壓方法 瀏覽:35
掃描pdf格式軟體 瀏覽:877
程序員在銀行開賬戶 瀏覽:516
android資料庫下載 瀏覽:750
中午伺服器崩潰怎麼辦 瀏覽:425
產品經理和程序員待遇 瀏覽:442
解憂程序員免費閱讀 瀏覽:109
錄像免壓縮 瀏覽:508
總結所學過的簡便演算法 瀏覽:362
南昌哪些地方需要程序員 瀏覽:761
三台伺服器配置IP地址 瀏覽:175
如何用命令方塊連續對話 瀏覽:280