Я переопределяю метод onDraw ImageView для применения радиуса к изображению, и он отлично работает, однако он имеет незначительную проблему на Android 5. Фактически он работает на Galaxy S II (4.1) и Nexus 4 (4.4.4), но не на Nexus 5 (5.0.1).Masked ImageView имеет черный фон на Android 5
На Nexus 5 есть черный фон, нарисованный за закругленным изображением, от которого я не избавился! Например, когда я поворачиваю ориентацию телефона, черный фон исчезает.
class Avatar extends ImageView
{
private RectF rectangle = new RectF()
private Paint paint1 = new Paint(Paint.ANTI_ALIAS_FLAG)
private Paint paint2 = new Paint()
public Avatar()
{
paint2.setXfermode(new PorterDuffXfermode(Mode.SRC_IN))
}
override void onDraw(Canvas canvas)
{
final Drawable drawable = getDrawable
if(drawable == null)
{
super.onDraw(canvas)
return
}
rectangle.set(0, 0, canvas.getWidth(), canvas.getHeight())
int restore = canvas.saveLayer(rectangle, null, Canvas.ALL_SAVE_FLAG)
canvas.drawRoundRect(rectangle, 50, 50, paint1)
canvas.saveLayer(rectangle, paint2, Canvas.ALL_SAVE_FLAG)
super.onDraw(canvas)
canvas.restoreToCount(restore)
}
}
Пожалуйста, игнорировать синтаксические ошибки или неверный конструктор как я свободно перевел от Scala
Я уверен, что вы не должны дважды звонить по тому же методу. Вы пытались заблокировать и разблокировать холст перед рисованием? –
После пересмотра кода вы не очищаете холст до прозрачного, и я не могу его запомнить, но вы можете также обрезать область перерисовывания. –
Вы просто пытаетесь создать круглое изображение? – tyczj