Android----Bitmap、Matrix

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)的位置上

093431643.jpg


你曾經說我走之後

  • 但願還有聯絡

  • 可以聆聽彼此的苦樂

  • 說實在的

  • 我已不能理智對待了

  • C_0004.gif

相關文章
相關標籤/搜索