2

第一个问题是 Notification(..) 构造函数只获取资源 id,而不是可绘制的。我需要在通知中显示一些小(动态)图形。不久之前,我能够实现自定义 View,只是扩展 View 类,并实现 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() 方法甚至没有被调用 :(。我将这个可绘制对象作为应用程序图标进行了测试。其他可绘制对象,如形状或图像都照常工作。

4

1 回答 1

0

该视图完美运行(我在 xml 布局文件中通过完整的类名使用它)。

也许是为了你自己的活动。View在任何RemoteViews情况下都不能使用自定义类。

我决定(通过类比),我可以构建自己的 Drawable 类并在 xml 文件中声明它,但这不起作用。

能不能不能无所谓。操作系统进程显示Notification. 操作系统进程没有您的自定义Drawable类。因此,操作系统进程不能使用任何依赖于您的自定义Drawable类的东西。

AFAIK,您通常无法创建新的可绘制资源类型。

于 2012-03-01T12:35:04.537 回答