Drawable是一種可繪制資源的載體,如圖形、圖像等。在實(shí)際開發(fā)中可以作為view的背景。主要有靜態(tài)和動(dòng)態(tài)兩種方式,靜態(tài)通過xml描述使用,動(dòng)態(tài)即自定義Drawable。本文實(shí)現(xiàn)一個(gè)圓形和圓角的背景圖片效果。
效果圖:
實(shí)現(xiàn)方式:
1.初始化一個(gè)BitmapShader著色器對(duì)象;
2.將著色器對(duì)象set給畫筆;
3.在畫布上繪制圓或圓角即可;
4.使用,view.setBackgroundDrawable
或者 ImageView.setImageDrawable
package com.mydrawable.musk; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Shader; import android.graphics.drawable.Drawable; /** * Created by musk. */ public class CircleDrawable extends Drawable { private Paint mPaint; private int mWidth; private Bitmap mBitmap; public CircleDrawable(Bitmap bitmap) { mBitmap = bitmap; //著色器,設(shè)置橫向和縱向的著色模式為平鋪 BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setShader(bitmapShader); mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight()); } //繪制 @Override public void draw(Canvas canvas) { canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint); } //設(shè)置透明度值 @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); } //設(shè)置顏色過濾器 @Override public void setColorFilter(ColorFilter colorFilter) { mPaint.setColorFilter(colorFilter); } //返回不透明度 @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } //返回圖片實(shí)際的寬高 @Override public int getIntrinsicWidth() { return mWidth; } @Override public int getIntrinsicHeight() { return mWidth; } }
自定義Drawable有五個(gè)方法必須覆寫,draw()、setAlpha()、setColorFilter()、getOpacity(),另外的getIntrinsicWidth()和getIntrinsicHeight()是在view設(shè)置wrap_content時(shí)設(shè)置drawable的寬度和高度。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。