2015-01-22 3 views
1

Я переопределяю метод 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

+0

Я уверен, что вы не должны дважды звонить по тому же методу. Вы пытались заблокировать и разблокировать холст перед рисованием? –

+0

После пересмотра кода вы не очищаете холст до прозрачного, и я не могу его запомнить, но вы можете также обрезать область перерисовывания. –

+0

Вы просто пытаетесь создать круглое изображение? – tyczj

ответ

0

Проблема была создана аппаратным ускорением. Я показывал аватар-заполнитель, который выводится из SVG, и потребовал от меня отключить аппаратное ускорение. Затем, когда фактическое растровое изображение закончило загрузку, я заменил SVG растровым изображением, но не включил аппаратное ускорение.

Теперь я смог избавиться от уродливого черного фона. Однако я до сих пор не понимаю, почему код не работает на Nexus 5, когда аппаратное ускорение отключено, в то время как на других устройствах он отлично работает!

Смежные вопросы