Android 開發:glide圓角,圓形,效率問題
1.目前能百度到的glide圓角,圓形方案都是錯誤的
2.實際上glide在後續的新版本里提供了圓角圓形方案。
剛開始我在做專案的時候,採用了百度到的方案,結果發現百度到的程式碼效率極差,尤其是在做recycleView的時候,展示圖片慢成狗。
於是我重新研究了glide程式碼,以及官方文件。
注:以下示例
圓形:
public class GlideCircleTransform extends BitmapTransformation { private static final String ID = "com.xiaohe."; private static final byte[] ID_BYTES = ID.getBytes(CHARSET); @Override protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) { int size = Math.min(toTransform.getWidth(), toTransform.getHeight()); int x = (toTransform.getWidth() - size) / 2; int y = (toTransform.getHeight() - size) / 2; Bitmap square = Bitmap.createBitmap(toTransform, x, y, size, size); Bitmap circle = pool.get(size, size, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(circle); Paint paint = new Paint(); paint.setShader(new BitmapShader(square, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); paint.setAntiAlias(true); float r = size / 2f; canvas.drawCircle(r, r, r, paint); return circle; } @Override public boolean equals(Object obj) { return obj instanceof GlideCircleTransform; } @Override public int hashCode() { return ID.hashCode(); } @Override public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { messageDigest.update(ID_BYTES); } }
圓角:
public class GlideRoundTransform extends BitmapTransformation { private static final String ID = "com.xiaohe."; private static final byte[] ID_BYTES = ID.getBytes(CHARSET); private int radius; public GlideRoundTransform(Context context, int radius) { this.radius = UUi.dp2px(radius); } @Override protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) { int width = toTransform.getWidth(); int height = toTransform.getHeight(); Bitmap bitmap = pool.get(width, height, Bitmap.Config.ARGB_8888); bitmap.setHasAlpha(true); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setShader(new BitmapShader(toTransform, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); canvas.drawRoundRect(new RectF(0, 0, width, height), radius, radius, paint); return bitmap; } @Override public boolean equals(Object obj) { if (obj instanceof GlideRoundTransform) { GlideRoundTransform other = (GlideRoundTransform) obj; return radius == other.radius; } return false; } @Override public int hashCode() { return Util.hashCode(ID.hashCode(), Util.hashCode(radius)); } @Override public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { messageDigest.update(ID_BYTES); byte[] radiusData = ByteBuffer.allocate(4).putInt(radius).array(); messageDigest.update(radiusData); } }
------------------------------------------------我是分割線------------------------------------------------
解釋說明:
問:為嘛這個示例效率高?????
答:這個示例明顯重寫了三個方法,百度到的程式碼都是重寫了兩個方法,並不能讓glide執行正常!!!!
-----------------------------------------------再分割------------------------------------------------------------
其實新版本的glide提供了這兩個方法
圓角:RequestOptions.bitmapTransform(new RoundedCorners( 5))
圓形:RequestOptions.bitmapTransform(new CircleCrop())
又跳過了一個坑。。。。。。。。。。。。。。。。。。。。開心
作者:王二蛋和他的狗
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2001/viewspace-2821858/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Glide實現圓角圖片,以及圓形圖片IDE
- Android 圓角、圓形 ImageView 實現AndroidView
- Flutter 圓形/圓角頭像Flutter
- Android Xfermode 實戰 實現圓形、圓角圖片Android
- Glide與CircleImageView載入圓形圖片的問題IDEView
- 《Android開發卷——設定圓形頭像,Android擷取圓形圖片》Android
- 你不知道的圓形圓角處理方式
- Fresco實踐-高斯模糊、圓形圓角、URL、File、Assets、Resource
- iOS圖片設定圓角效能問題iOS
- 圓形視訊和圓角視訊的一種實現方式
- 在相親原始碼開發中,如何實現圓角及特殊圓角的使用?原始碼
- Android自定義View之圖片外形特效——輕鬆實現圓角和圓形圖片AndroidView特效
- android 圓角圖片 處理Android
- visio圓角矩形怎麼改變圓角大小
- 根據SVG Arc求出其開始角、擺動角和橢圓圓心SVG
- Android之圓形頭像裁切Android
- Android 自定義圓形頭像Android
- Android自定義圓形頭像Android
- android 螢幕圓角實現方法Android
- 解決iPhone 瀏覽器上的圓角問題iPhone瀏覽器
- iOS開發_繪製圓角矩形虛線環iOS
- 提供一個Glide靈活載入圓角圖片的方法IDE
- android圓形頭像的選擇和剪下並儲存出圓形圖片Android
- CSS 文字框圓角CSS
- AUTOCAD——圓角命令
- iOS 繪製圓角iOS
- PHP合成圖圓角PHP
- css3圓角CSSS3
- Android 圓形ProgressBar 改變顏色Android
- Android自定義圓形進度條Android
- Android Reveal圓形Activity轉場動畫Android動畫
- Android 繪圖和shape圓形Android繪圖
- Android 圓形頭像 自己動手Android
- 筆記-iOS設定圓角方法以及指定位置設圓角筆記iOS
- 利用DOTNETBAR製作圓角窗體和圓角控制元件控制元件
- CSS畫出半圓,四分之一圓,三角等圖形CSS
- XImageView-ShapeImageView處理ImageView形狀,原形圓角等View
- matlab練習程式(三角形外接圓)Matlab