Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android自定義View之圖形圖像Bitmap

Android自定義View之圖形圖像Bitmap

編輯:關於Android編程

概述:

BitMap代表一張位圖,擴展名可以是.bmp或者.dib。位圖是Windows標准格式圖形文件,它將圖像定義為由點(像素)組成,每個點可以由多種色彩表示,包括2、4、8、16、24和32位色彩。。
在android系統當中,bitmap是圖像處理最重要的類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉、縮放、對稱等操作,並可以指定格式保存圖像文件。

Bitmap的各種操作:

demo

首先,寫一個自定義View:

public class MyBitmapView extends View {
    private int width;
    private int height;

    private int mBitmapWidth;
    private int mBitmapHeight;

    private Paint mPaint;
    private Bitmap mBitmap;
    private Matrix matrix;
    public MyBitmapView(Context context) {
        super(context);
    }

    public MyBitmapView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();

        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.aa);
        mBitmapWidth = mBitmap.getWidth();
        mBitmapHeight = mBitmap.getHeight();
        matrix = new Matrix();

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
        height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
        setMeasuredDimension(width, height);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //平移圖像,參數:水平相移量,垂直相移量
        matrix.postTranslate(mBitmapWidth, mBitmapHeight);
        canvas.drawBitmap(mBitmap, matrix, mPaint);

        //重置matrix,以前的狀態會消失
        matrix.reset();
        //將圖像放大,參數:水平放大倍數,垂直放大倍數;如果小於1,則是縮小
        matrix.postScale(2, 2);
        canvas.drawBitmap(mBitmap, matrix, mPaint);
        matrix.reset();
        canvas.drawBitmap(mBitmap, 0, 0, mPaint);

        matrix.reset();
        canvas.drawBitmap(mBitmap, 0, 0, mPaint);
        //將圖形選擇180度,旋轉後的圖形位置會發生變化
        matrix.postRotate(180);
        matrix.postTranslate(mBitmapWidth*2,mBitmapHeight*2);
        canvas.drawBitmap(mBitmap, matrix, mPaint);

        //側切
        canvas.drawBitmap(mBitmap,0,0,mPaint);
        matrix.reset();
        //側切一個圖像,實際上是將圖像右下角的x,y坐標增加參數倍,這裡x坐標不變,y坐標增加一倍
        matrix.postSkew(0,1);
        canvas.drawBitmap(mBitmap,matrix,mPaint);

        //x軸對稱
        matrix.reset();
        canvas.drawBitmap(mBitmap, 0, 0, mPaint);
        float values[] = {1f,0f,0f,0f,-1f, 0f, 0f, 0f,1f};
        //此方法作出的處理是:讓圖片的矩陣與傳入的矩陣相乘
        matrix.setValues(values);
        matrix.postTranslate(0, mBitmapHeight * 2);
        canvas.drawBitmap(mBitmap,matrix,mPaint);

        //y軸對稱
        matrix.reset();
        canvas.drawBitmap(mBitmap,0,0,mPaint);
        float values2[] = {-1f,0f,1f,0f,1f, 0f, 0f, 0f,1f};
        matrix.setValues(values2);
        matrix.postTranslate(mBitmapWidth*2,0);
        canvas.drawBitmap(mBitmap,matrix,mPaint);

    }
}

結果演示:

平移:
這裡寫圖片描述

縮放:<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjxiciAvPg0KPGltZyBhbHQ9"這裡寫圖片描述" src="/uploadfile/Collfiles/20150918/201509180849428.png" title="\" />

旋轉:
這裡寫圖片描述

側切:
這裡寫圖片描述

x軸對稱:
這裡寫圖片描述

y軸對稱:
這裡寫圖片描述

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved