圓形 ImageView 的實現方法
廢話不多說,直接上程式碼
public class CircleDrawable extends Drawable {
protected final float cornerRadius;
protected final int margin;
protected final RectF mRect = new RectF(),
mBitmapRect;
protected final BitmapShader bitmapShader;
protected final Paint paint;
protected float center;
public CircleDrawable(Bitmap bitmap, float center, int cornerRadius, int margin) {
this.cornerRadius = cornerRadius;
this.margin = margin;
this.center = center;
bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mBitmapRect = new RectF (margin, margin, bitmap.getWidth() - margin, bitmap.getHeight() - margin);
paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(bitmapShader);
}
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
mRect.set(margin, margin, bounds.width() - margin, bounds.height() - margin);
// Resize the original bitmap to fit the new bound
Matrix shaderMatrix = new Matrix();
shaderMatrix.setRectToRect(mBitmapRect, mRect, Matrix.ScaleToFit.FILL);
bitmapShader.setLocalMatrix(shaderMatrix);
}
@Override
public void draw(Canvas canvas) {
canvas.drawCircle(center, center, cornerRadius, paint);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public void setAlpha(int alpha) {
paint.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter cf) {
paint.setColorFilter(cf);
}
}
imageView.setImageDrawable(new CircleDrawable(bitmap, center, cornerRadius, margin));
實現效果圖如下
相關文章
- Android 圓角、圓形 ImageView 實現AndroidView
- 自定義圓形ImageView(仿QQ頭像)View
- 自定義ImageView完成圓形頭像自定義View
- canvas實現的圓形時鐘效果Canvas
- Android Xfermode 實戰 實現圓形、圓角圖片Android
- XImageView-ShapeImageView處理ImageView形狀,原形圓角等View
- 九,iOS圓形介面選單的實現iOS
- css實現圓形、橢圓和半圓效果程式碼例項CSS
- 圓形視訊和圓角視訊的一種實現方式
- 如何用html實現圓形雲臺HTML
- jquery和css實現的圓形鐘錶效果jQueryCSS
- canvas實現的圓形走動鐘錶效果Canvas
- Glide實現圓角圖片,以及圓形圖片IDE
- ios Image裁剪成圓形的方法iOS
- CircleImageView 圓形圖片頭像實現View
- js和css3實現的圓形鐘錶效果JSCSSS3
- canvas實現的圓形鐘錶效果程式碼例項Canvas
- 【譯】使用CSS Transitions實現圓形懸停效果CSS
- 自定義圓形View:實現跟隨手指移動的小球View
- css3實現圓形載入動畫的js外掛CSSS3動畫JS
- Flutter實現圓形波浪進度球【canvas+animation】FlutterCanvas
- css3實現動態圓形導航欄CSSS3
- android 螢幕圓角實現方法Android
- Android自定義圓形進度條實現程式碼Android
- Python 實現任意多邊形的最大內切圓演算法_任意多邊形最大內切圓演算法Python演算法
- 滑鼠懸浮出現圓形資訊遮罩層遮罩
- Fresco實踐-高斯模糊、圓形圓角、URL、File、Assets、Resource
- Flutter 圓形/圓角頭像Flutter
- 圓形放大的hover效果
- JavaScript圖片裁剪的無變形實現方法JavaScript
- css3和js實現的圓形鐘錶效果程式碼例項CSSS3JS
- Android自定義控制元件系列之圓形進度條的實現Android控制元件
- CSS 奇思妙想 | 巧妙的實現帶圓角的三角形CSS
- 視覺化學習:使用WebGL繪製圓形,實現色盤視覺化Web
- 使用 HTML5 Canvas 實現圓形圖片裁剪並上傳HTMLCanvas
- Android自定義View之圖片外形特效——輕鬆實現圓角和圓形圖片AndroidView特效
- 標準圓形餅圖Python繪製方法Python
- Android中將方形圖片擷取成圓形的兩種實現方式Android