圓形 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));
實現效果圖如下
![291805-dbff65ac04510eb1.PNG](https://i.iter01.com/images/f65c1e4eb9d70741fdd1aede4e0346c25120e5d12c16706f8b7a9dbc58ec89e6.png)
相關文章
- Android 圓角、圓形 ImageView 實現AndroidView
- XImageView-ShapeImageView處理ImageView形狀,原形圓角等View
- Glide實現圓角圖片,以及圓形圖片IDE
- 圓形視訊和圓角視訊的一種實現方式
- 如何用html實現圓形雲臺HTML
- 【譯】使用CSS Transitions實現圓形懸停效果CSS
- Flutter實現圓形波浪進度球【canvas+animation】FlutterCanvas
- Python 實現任意多邊形的最大內切圓演算法_任意多邊形最大內切圓演算法Python演算法
- 標準圓形餅圖Python繪製方法Python
- 使用RxJava實現ImageView的拖動、旋轉和縮放RxJavaView
- 圓形放大的hover效果
- CSS 奇思妙想 | 巧妙的實現帶圓角的三角形CSS
- Android自定義View之圖片外形特效——輕鬆實現圓角和圓形圖片AndroidView特效
- Flutter 圓形/圓角頭像Flutter
- 視覺化學習:使用WebGL繪製圓形,實現色盤視覺化Web
- 使用 HTML5 Canvas 實現圓形圖片裁剪並上傳HTMLCanvas
- 滑鼠懸浮出現圓形資訊遮罩層遮罩
- 方法的形參和實參
- 方法的實參和形參
- CSS3圓形漸隱漸現迴圈出現CSSS3
- 別用圖片了,CSS遮罩合成實現帶圓角的環形loading動畫CSS遮罩動畫
- canvas 繪製圓形Canvas
- PCB 板邊倒圓角的實現方法(基本演算法一)演算法
- Android中圖片圓形設定三種方法介紹Android
- 一個圓形時鐘
- canvas圓形時鐘效果Canvas
- SVG <circle> 繪製圓形SVG
- SVG圓形鐘錶效果SVG
- CSS圓形圖片效果CSS
- Android 開發:glide圓角,圓形,效率問題AndroidIDE
- Flutter 彩邊圓角 Container 的實現FlutterAI
- Dreamweaver中CSS怎麼製作徑向圓形漸變的五種方法CSS
- 直播網站原始碼,Canvas實現圓形時間倒數計時進度條網站原始碼Canvas
- CGContextRef處理圓形圖片GCContext
- JavaScript 動態圓形鐘錶JavaScript
- Flutter 波浪圓形進度條Flutter
- android自帶ProgressBar圓形進度條修改顏色的技巧方法無bug探索Android
- WPF之小米Logo超圓角的實現Go
- Android自定義圓形進度條Android