画像を円形にする必要があるアプリケーションがあります。元の画像は正方形または長方形です。この画像はサーバーからのものです。この画像を取得し、円形にする必要がある 7 つの画像の画像ビューに設定します。
画像の読み込みにはUniversal Image Loaderを使用しました。
これは私の画像を丸める方法です。
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = pixels;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
だからonLoadingComplete()
UniversalImageLoaderの中で、私はこれをやったimageView.setImageBitMap(getRoundedCornerBitmap(bitmap, pixel))
それは正常に動作しますが、時々私はOutofMemoryError
. Android-Universal-Image-Loader (github)で見つけました。
Avoid using RoundedBitmapDisplayer. It creates new Bitmap object with ARGB_8888 config for displaying during work.
OutOfMemoryError に苦しむことなく画像の丸めを実装する別の方法はありますか?
どんな助けでも大歓迎です。
[UPDATE] : これが ImageLoader の構成方法です。
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).denyCacheImageMultipleSizesInMemory()
.memoryCache(new WeakMemoryCache())
.discCache(new UnlimitedDiscCache(cacheDir))
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())
.defaultDisplayImageOptions(
new DisplayImageOptions.Builder()
.showStubImage(R.drawable.default_user)
.resetViewBeforeLoading()
.cacheOnDisc()
.bitmapConfig(Bitmap.Config.RGB_565)
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
.build())
.tasksProcessingOrder(QueueProcessingType.FIFO)
.imageDownloader(new HttpClientImageDownloader(context, new DefaultHttpClient(manager, params)))
.threadPoolSize(2)
.build();
// Initialize ImageLoader with created configuration.
imageLoader.init(config);