android 之 畫圖

Matrix以順時針旋轉爲正,這一點與三角函數裏面的角度定義剛好相反。

先說幾個常用的方法:setValues()以及set、pre、post系列的方法,如果當前矩陣是A變化矩陣是B則pre表示A * B,post表示B * A關於此的詳細介紹可以參考http://zensheno.blog.51cto.com/2712776/513652http://philn.blog.163.com/blog/static/104014753201351795246382/

初次給矩陣setValues的時候要注意,如以下代碼:

img = (ImageView)findViewById(R.id.matrix_test);
float[] x = {1,0,300, // 如果不對圖片做旋轉操作那麼前兩個數保持1,0
			 0,1,300, // 同上,保持0,1;對於旋轉來說 1表示對應的x,y不變及不旋轉
			 0,0,1};
Matrix matrix = new Matrix();
matrix.setValues(x);
Bitmap sourceImg = BitmapFactory.decodeResource(getResources(), R.drawable.temp);
Bitmap resizedBitmap = Bitmap.createBitmap(sourceImg, 0, 0,
		sourceImg.getWidth(), sourceImg.getHeight(), matrix, true);
//		img.setImageBitmap(resizedBitmap);
BitmapDrawable myNewBitmapDrawable = new BitmapDrawable(resizedBitmap);
img.setImageDrawable(myNewBitmapDrawable);
注意以上註釋部分,如果把1換爲0則會出報異常;

android的基本圖形接口:

1.Bitmap,可以來自資源/文件,也可以在程序中創建,實際上的功能相當於圖片的存儲空間(可以理解爲“內存中的虛擬畫布”);

2.Canvas,緊密與Bitmap聯繫,把Bitmap比喻內容的話,那麼Canvas就是提供了衆多方法操作Bitamp的平臺(相對於Bitmap是實際的畫布);

3.Paint,與Canvas緊密聯繫,是"畫板"上的筆刷工具,也用於設置View控件上的樣式; 

4.Drawable,Drawable就是把前三者繪圖結果表現出來的接口。Drawable多個子類,例如:位圖(BitmapDrawable)、圖形(ShapeDrawable)、圖層(LayerDrawable)等。


下面通過幾端代碼說明下以上的作用:

public class TestView extends View {
private ShapeDrawable mDrawable;
public testView(Context context) {
super(context);
int x = 10;
int y = 10;
int width = 300;
int height = 50;
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xff74AC23);
mDrawable.setBounds(x, y, x + width, y + height);
}
protected void onDraw(Canvas canvas)
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);//View的白色背景
mDrawable.draw(canvas);
}
}
自定義的View;

Bitmap bmp=BitmapFactory.decodeResource(r, R.drawable.icon);//只讀,不能直接在bmp上畫  
Bitmap newb = Bitmap.createBitmap( 300, 300, Config.ARGB_8888 );  
  
Canvas canvasTemp = new Canvas( newb );  
canvasTemp.drawColor(Color.TRANSPARENT);  
  
Paint p = new Paint();  
String familyName ="宋體";  
Typeface font = Typeface.create(familyName,Typeface.BOLD);  
p.setColor(Color.RED);  
p.setTypeface(font);  
p.setTextSize(22);  
canvasTemp.drawText("寫字。。。",50,50,p);  
canvasTemp.drawBitmap(bmp, 50, 50, p);//畫圖  
imageView.setImageBitmap(newb); 
把ImageView的圖片設置爲通過Canvas繪製的圖;



發佈了21 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章