Bitmap做爲圖片的一種承載方式,他能夠提供圖片文件的信息,也能夠對圖片作出相應的效果與操做。
java
一:Bitmapcanvas
Bitmap做爲圖片的一種承載方式,他能夠提供圖片文件的信息,也能夠對圖片作出相應的效果與操做。他有兩種資源引用方式和三種繪製圖形的方式。ide
1:2種引用方式
ui
(1)利用BitmapFactory工廠的形式建立Bitmap
this
◆聲明Bitmap對象spa
private Bitmap bitmap;//聲明Bitmap對象 |
◆資源引用,得到Bitmap對象code
第一種載入資源的方式 bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1); |
(2)利用BitmapDrawable建立Bitmap
orm
◆聲明Bitmap、BitmapDrawable對象對象
private Bitmap bitmap;//聲明Bitmap對象 private BitmapDrawable bitmapDrawable;//聲明bitmapDrawable對象 |
◆資源引用得到BitmapDrawable對象blog
// 第二種載入資源的方式 bitmapDrawable = (BitmapDrawable) getResources().getDrawable( R.drawable.a1); |
◆得到Bitmap對象
bitmap = bitmapDrawable.getBitmap();//獲得bitmap對象 |
2:3種繪製圖形的方式
(1)經過畫布Canvas對象的drawBitmap方法繪製
// 第一種資源繪製方式 canvas.drawBitmap(bitmap, 0, 0, null); //從(0,0)點開始繪製圖片大小的Bitmap |
(2)經過Rect(負責圖形的裁剪)和RectF(負責填充的區域)繪製
// 第二種資源繪製方式 Rect rect = new Rect(0,0,10,10);//圖形裁剪,從00開始裁剪,裁剪的圖片大小爲10*10 RectF rectf = new RectF(20,20,100,100);//將裁剪的圖片繪製到起點爲20,20,大小爲80*80的區域上 canvas.drawBitmap(bitmap, rect, rectf, null); |
(3)經過bitmapDrawable的setbounds方法設置填充區域,調用對象的draw方法繪製
// 第三種資源繪製方式 bitmapDrawable.setBounds(0, 0, 300, 300);// 從00開始,圖片填充到300*300的區域上 bitmapDrawable.draw(canvas);// 繪製 |
以上的幾種方式能夠任意的組合,都可以達到效果。
二:具體應用
功能:繼承自SurfaceView,自定義視圖,完成 圖片的繪製
1:繼承自,SurfaceView,重寫三個方法,自定義繪製方法(注意畫布的鎖定與解鎖)
public class MyView extends SurfaceView implements Callback { private Bitmap bitmap;//聲明Bitmap對象 private BitmapDrawable bitmapDrawable;//聲明bitmapDrawable對象 public MyView(Context context) { super(context); getHolder().addCallback(this); // 第一種載入資源的方式 // bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1); // 第二種載入資源的方式 bitmapDrawable = (BitmapDrawable) getResources().getDrawable( R.drawable.a1); bitmap = bitmapDrawable.getBitmap();//獲得bitmap對象 } public void draw() { Canvas canvas = getHolder().lockCanvas();// 鎖定畫布 canvas.drawColor(Color.WHITE); // 第一種資源繪製方式 // canvas.drawBitmap(bitmap, 0, 0, null); //從(0,0)點開始繪製圖片大小的Bitmap // 第二種資源繪製方式 // Rect rect = new Rect(0,0,10,10);//圖形裁剪,從00開始裁剪,裁剪的圖片大小爲10*10 // RectF rectf = new // RectF(20,20,100,100);//將裁剪的圖片繪製到起點爲20,20,大小爲80*80的區域上 // canvas.drawBitmap(bitmap, rect, rectf, null); // 第三種資源繪製方式 bitmapDrawable.setBounds(0, 0, 300, 300);// 從00開始,圖片填充到300*300的區域上 bitmapDrawable.draw(canvas);// 繪製 getHolder().unlockCanvasAndPost(canvas);// 解鎖畫布 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { draw();// 調用 } @Override public void surfaceDestroyed(SurfaceHolder holder) { } } |
2:主界面中引入自定義視圖
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this));//加載自定義視圖 } |
3:結果:從界面的(0,0)點平鋪到(300,300)的位置上
你曾經說我走之後