Маска изображения в макете в Android

Мне нужно иметь возможность замаскировать изображение в моем макете, чтобы углы были закруглены. Есть ли простой способ указать альфа-маску в макете? Я бы не хотел вручную маскировать каждое используемое растровое изображение.


РЕДАКТИРОВАТЬ

Вот мой код, как указано в другом ответе:

HttpURLConnection connection = (HttpURLConnection) this.items.get(position).getIcon().toURL().openConnection();
connection.setDoInput(true);
connection.connect();

Bitmap bitmap = BitmapFactory.decodeStream(connection.getInputStream());

Integer dimension = bitmap.getWidth() > bitmap.getHeight() ? bitmap.getWidth() :
        bitmap.getHeight();

Bitmap rounder = Bitmap.createBitmap(dimension, dimension, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(rounder);

Paint painter = new Paint(Paint.ANTI_ALIAS_FLAG);
painter.setColor(Color.RED);

canvas.drawRoundRect(new RectF(0, 0, dimension, dimension), 
        20.0F, 20.0F, painter);

painter.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

canvas.drawBitmap(bitmap, 0, 0, null);
canvas.drawBitmap(rounder, 0, 0, painter);

holder.image.setImageBitmap(bitmap);

Однако это не работает. Я не вижу закругленных углов, я вижу обычное изображение как есть. Есть ли в конце пропущенный шаг, связанный с холстом?


person Naftuli Kay    schedule 15.02.2011    source источник
comment
Взгляните на этот вопрос stackoverflow.com/questions/1705239/   -  person Damp    schedule 15.02.2011


Ответы (2)


Похоже, на ваш вопрос уже был дан ответ раньше, возможно, это может помочь ?

person VoronoiPotato    schedule 15.02.2011
comment
Это помогает, но как сделать так, чтобы растровое изображение ImageView было скругленным? В его ответе, кажется, отсутствует последний шаг :( - person Naftuli Kay; 15.02.2011
comment
Я изменил свой вопрос, включив в него код, который я использую, но который не работает. - person Naftuli Kay; 15.02.2011
comment
Моя ссылка отличалась от ссылки damp, моя повторялась через изображение в виде массива списков, и там, где альфа-маска была красной (другое изображение), делала основную картинку ясной. Элегантное решение проблемы. Я не знаю, обязательно ли это лучшее решение, но оно кажется довольно надежным. - person VoronoiPotato; 16.02.2011
comment
Ответ относится к программам на чистом Java. Я уверен, что в Android вы можете добиться лучших и быстрых результатов, если используете Canvas. Но я тоже ищу хороший ответ на что-то подобное. - person Janusz; 09.02.2012

Есть несколько способов сделать это. Я бы сделал 9 патч прозрачных, за исключением углов, и нарисовал бы его поверх изображений.

person FoamyGuy    schedule 15.02.2011