Методы создания круглых растровых значков в Java для Android

Чтобы создать круглый растровый значок в Java для Android, вы можете использовать различные методы. Вот несколько подходов:

Метод 1: использование Canvas и BitmapShader

public Bitmap createCircularBitmap(Bitmap bitmap) {
    int diameter = Math.min(bitmap.getWidth(), bitmap.getHeight());
    Bitmap circularBitmap = Bitmap.createBitmap(diameter, diameter, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(circularBitmap);
    Paint paint = new Paint();
    BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    paint.setShader(shader);
    paint.setAntiAlias(true);
    float radius = diameter / 2f;
    canvas.drawCircle(radius, radius, radius, paint);
    return circularBitmap;
}

Метод 2: использование RoundedBitmapDrawable

public Bitmap createCircularBitmap(Bitmap bitmap) {
    RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
    roundedBitmapDrawable.setCircular(true);
    return roundedBitmapDrawable.getBitmap();
}

Метод 3. Использование библиотеки Glide (с преобразованием RoundedCorners)

implementation 'com.github.bumptech.glide:glide:4.12.0'
implementation 'jp.wasabeef:glide-transformations:4.1.0'
public void loadCircularBitmap(ImageView imageView, String imageUrl) {
    RequestOptions requestOptions = new RequestOptions().transform(new RoundedCornersTransformation(radius, 0));
    Glide.with(context)
         .load(imageUrl)
         .apply(requestOptions)
         .into(imageView);
}

Метод 4. Использование библиотеки Пикассо (с преобразованием)

implementation 'com.squareup.picasso:picasso:2.71828'
public void loadCircularBitmap(ImageView imageView, String imageUrl) {
    Picasso.get()
           .load(imageUrl)
           .transform(new CircleTransform())
           .into(imageView);
}

Метод 5. Использование библиотеки Universal Image Loader (с CircleBitmapDisplayer)

implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
public void loadCircularBitmap(ImageView imageView, String imageUrl) {
    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .displayer(new CircleBitmapDisplayer())
            .build();
    ImageLoader.getInstance().displayImage(imageUrl, imageView, options);
}