Растровая круговая обрезка в андроиде

У меня квадратный растровый рисунок отображается под полупрозрачным кругом. Пользователь может коснуться и перетащить растровое изображение, чтобы поместить его. Я хочу иметь возможность обрезать то, что когда-либо часть растрового изображения находится под кругом. Как я могу это сделать?

Ответ 1

посмотрите RoundedBitmapDrawable в библиотеке поддержки

все, что вам нужно сделать, это дать ему растровое изображение и радиус угла

RoundedBitmapDrawable img = RoundedBitmapDrawableFactory.create(getResources(),bitmap);
img.setCornerRadius(radius);

imageView.setImageDrawable(img);

Ответ 2

Вы можете сделать свой круговой обзор изображения с помощью RoundedBitmapDrawable

вот код для достижения roundedImageview:

ImageView profilePic=(ImageView)findViewById(R.id.user_image);
//get bitmap of the image
Bitmap imageBitmap=BitmapFactory.decodeResource(getResources(),  R.drawable.large_icon);
RoundedBitmapDrawable roundedBitmapDrawable=
  RoundedBitmapDrawableFactory.create(getResources(), imageBitmap);
roundedBitmapDrawable.setCornerRadius(50.0f);
roundedBitmapDrawable.setAntiAlias(true);
profilePic.setImageDrawable(roundedBitmapDrawable);

Ответ 3

Вы можете использовать мощность PorterDuff, чтобы получить растровое изображение в любой форме или пути...

Вот пример:

public static Bitmap getCircular(Bitmap bm, int cornerRadiusPx) {
    int w = bm.getWidth();
    int h = bm.getHeight();

    int radius = (w < h) ? w : h;
    w = radius;
    h = radius;

    Bitmap bmOut = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bmOut);

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(0xff424242);

    Rect rect = new Rect(0, 0, w, h);
    RectF rectF = new RectF(rect);

    canvas.drawARGB(0, 0, 0, 0);
    canvas.drawCircle(rectF.left + (rectF.width()/2), rectF.top + (rectF.height()/2), radius / 2, paint);

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bm, rect, rect, paint);

    return bmOut;
}

Ответ 4

Вот ссылка на образец проекта. Он имеет прозрачный квадрат над изображением. Вы можете ущипнуть масштаб или перетащить нижнее изображение и можете его форматировать.

https://github.com/tcking/ImageCroppingView.

Квадрат выполнен с использованием холста. вы можете изменить его на любую форму, как хотите, изменив холст. Хоп это поможет вам.