国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android canvas drawBitmap方法詳解及實例

2019-10-23 19:50:14
字體:
來源:轉載
供稿:網友

 Android canvas drawBitmap方法詳解及實例

之前自己在自定義view,用到canvas.drawBitmap(Bitmap, SrcRect, DesRect, Paint)的時候,對其中的第2和3個參數的含義含糊不清。看源碼函數也沒理解,然后看了一些其他的博客加上自己的理解,整理如下。首先,我們看一張圖片,今天就要繪制這張圖片。

Android,canvas,drawBitmap方法,drawBitmap方法詳解,drawBitmap

然后將圖片用紅色的線條分成4個部分,如下:


Android,canvas,drawBitmap方法,drawBitmap方法詳解,drawBitmap

我們自定義一個View,代碼如下:

public class PoterDuffLoadingView extends View { private Resources mResources; private Paint mBitPaint; private Bitmap mBitmap; private int mTotalWidth, mTotalHeight; private Bitmap girlBitmap; private int girlBitWidth , girlBitHeight; private Rect girlSrcRect , girlDesRect; public PoterDuffLoadingView(Context context) {  super(context);  mResources = getResources();  initBitmap(); } private void initBitmap() {  //美女圖片的寬和高  girlBitmap = ((BitmapDrawable)mResources.getDrawable(R.drawable.a1)).getBitmap();  girlBitWidth = girlBitmap.getWidth();  girlBitHeight = girlBitmap.getHeight(); } @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  canvas.drawBitmap(girlBitmap, girlSrcRect, girlDesRect, null); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {  Log.d("xxxxxx", "onSizeChanged , w = "+w+" , h = "+h+" , mBitWidth = "+mBitWidth+" , mBitHeight = "+mBitHeight);  super.onSizeChanged(w, h, oldw, oldh);  mTotalWidth = w;  mTotalHeight = h;  girlSrcRect = new Rect(0, 0, girlBitWidth, girlBitHeight);  girlDesRect = new Rect(0, 0, girlBitWidth, girlBitHeight); }}

其中:

girlSrcRect = new Rect(0, 0, girlBitWidth, girlBitHeight); 

表示要畫的圖就是整個圖片的大小。我覺得girlSrcRect 就是指畫圖的大小范圍。

girlDesRect :就是所畫的圖在View上的位置。表是距離左邊和上邊為0,右邊(girlBitWidth - 0)就為圖片的寬度,下邊(girlBitHeight - 0)為圖片的高度。

效果圖如下 :


Android,canvas,drawBitmap方法,drawBitmap方法詳解,drawBitmap

當我們想移動圖片的位置,代碼如下:

girlDesRect = new Rect(20, 50, 20+girlBitWidth, 50+girlBitHeight);

表示圖片的左邊所在的位置為20個像素,圖片的頂部在View上的位置為50個像素。圖片右邊在view上的位置為(20+girlBitWidth )即距離圖片的左邊的距離是:[(20+girlBitWidth )- 20]。底部一樣的道理。

如圖:


Android,canvas,drawBitmap方法,drawBitmap方法詳解,drawBitmap

如果我們只想畫上述圖片的第2部分,該怎么做呢?我們只需要做如下修改:

girlSrcRect = new Rect(girlBitWidth/2, 0, girlBitWidth, girlBitHeight/2);  girlDesRect = new Rect(20, 50, 20+girlBitWidth, 50+girlBitHeight);

效果圖:
Android,canvas,drawBitmap方法,drawBitmap方法詳解,drawBitmap
是不是就是顯示圖片的第二部分呢,細心的會發現這個圖和之前整體的圖片大小是一樣的。原因是什么呢:

girlSrcRect :表示我們要畫圖的部分。

girlDesRect :表示我們要繪圖的位置。從上面的girlDesRect 值看出,繪圖的位置的確是整個圖片的位置。

那我們只想要1/4圖的大小呢,怎么辦?

girlSrcRect = new Rect(girlBitWidth/2, 0, girlBitWidth, girlBitHeight/2);  girlDesRect = new Rect(20, 50, 20+girlBitWidth/2, 50+girlBitHeight/2);

如下圖:
Android,canvas,drawBitmap方法,drawBitmap方法詳解,drawBitmap

好了,就到這里了,畢竟自己寫的才回更深刻!

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 图们市| 汤原县| 宣化县| 汾西县| 博湖县| 柳河县| 彰化县| 通许县| 平昌县| 双桥区| 浠水县| 上蔡县| 东海县| 巴彦县| 乃东县| 瑞昌市| 榆中县| 和龙市| 松溪县| 惠来县| 金阳县| 游戏| 孝义市| 军事| 温泉县| 廉江市| 河源市| 珠海市| 兴山县| 梨树县| 岫岩| 惠州市| 信丰县| 屯门区| 安远县| 泸州市| 云安县| 鹤岗市| 中山市| 庄河市| 绿春县|