Есть ли способ использовать собственный класс Drawable в выводимом XML?

Первая проблема заключалась в том, что конструктор Notification(..) получает только идентификатор ресурса, а не рисуемый. Мне нужно отобразить небольшую (динамическую) графику в уведомлении. Незадолго до этого я смог реализовать собственное представление, просто расширил класс представления и реализовал метод onDraw(). Представление работает отлично (и я использовал его по полному имени класса в файле макета xml). Я решил (по аналогии), что могу создать свой класс Drawable и объявить его в xml файле, но это не работает. Это мой рисунок:

public class TestDrawable extends Drawable {

  public TestDrawable() {
    this.setBounds(0, 0, this.getIntrinsicWidth(), this.getIntrinsicHeight());
  }

  @Override
  public int getIntrinsicWidth() {
      return 36;
  }

  @Override
  public int getIntrinsicHeight() {
      return 36;

  }  

  @Override
  public void draw(Canvas canvas) {
    Paint paint = new Paint();
    paint.setStrokeWidth(2);
    paint.setColor(Color.BLUE);
    canvas.drawCircle(8, 8, 3, paint);
  }

  @Override
  public void setAlpha(int alpha) {        
  }

  @Override
  public void setColorFilter(ColorFilter cf) {
  }

  @Override
  public int getOpacity() {
    return PixelFormat.OPAQUE;
  }
}

Я проверил множество вариантов xml-файлов, конструкторов и комбинаций методов. Но метод draw() даже не вызывается :(. Я тестировал этот объект рисования в качестве значка приложения. Другие объекты рисования, такие как фигуры или изображения, работают как обычно.


person hydra    schedule 01.03.2012    source источник
comment
Я не знаком с расширением Drawables, но вам, вероятно, следует вызвать конструктор super() внутри вашего конструктора.   -  person jcxavier    schedule 01.03.2012
comment
Спасибо, но Drawable является абстрактным классом и не имеет конструктора.   -  person hydra    schedule 01.03.2012


Ответы (1)


Представление работает отлично (и я использовал его по полному имени класса в файле макета xml).

Возможно, для собственной деятельности. Вы не можете использовать собственные View классы ни при каких RemoteViews обстоятельствах.

Я решил (по аналогии), что могу создать свой класс Drawable и объявить его в xml файле, но это не работает.

Можете вы или не можете, не имеет значения. Процесс ОС отображает файл Notification. Процесс ОС не имеет вашего пользовательского класса Drawable. Следовательно, процесс ОС не может использовать ничего, что зависит от вашего пользовательского класса Drawable.

Насколько я знаю, вы вообще не можете создавать новые типы ресурсов, которые можно рисовать.

person CommonsWare    schedule 01.03.2012
comment
Может быть. Но я знаю несколько приложений, которые отображают текст вместо значка в уведомлении. Как они это сделали? Я нашел два способа: 1) Custom drawable 2) динамически создавать битамп с текстом, но это не работает, потому что нет возможности назначить drawable с уведомлением, только по идентификатору ресурса! - person hydra; 01.03.2012
comment
@hydra: я знаю несколько приложений, которые отображают текст вместо значка в уведомлении - пожалуйста, опубликуйте скриншоты. - person CommonsWare; 01.03.2012
comment
Например, market.android.com/ ( посередине) Вы думаете, что это 100 статичных рисунков? - person hydra; 01.03.2012
comment
@hydra: Как вы думаете, это 100 статических рисунков? -- наверное, да. - person CommonsWare; 01.03.2012