0

我创建了一个ImageView子类,它使用BitmapShaderPaintCanvas将图像绘制成圆形,从而营造出圆形的ImageView感觉和外观。Facebook 的 ChatHeads 所做的一件事是在他们的顶部放置一个通知框,ImageView说明有多少新消息。我想模仿这种外观并能够在我的CircularImageView. 这是我正在谈论的一个例子:

在此处输入图像描述

注意到照片中数字第一的红色框了吗?我想在我的上方放置类似的东西,ImageView但不确定我将如何去做。也许我可以覆盖该onDraw方法并在对象上使用该drawText方法,canvas但我将如何为文本提供正确的坐标?坐标是否相对于ImageView?

那么,总而言之,将通知框放置在 的最佳方法是ImageView什么?

4

1 回答 1

0

我的问题的解决方案正是我的想法。我必须重写该onDraw方法,并且在将 绘制BitmapCanvas一个圆圈之后(在我的问题之前已经完成),我只需要在实例上调用该drawText方法,该Canvas实例将绘制之前绘制的任何内容。

这是代码:

BitmapDrawable bitDraw = (BitmapDrawable) this.getDrawable();
Bitmap bitmap = bitDraw.getBitmap();

//paint for the text
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
paint.setTextSize((int) getTextSize() * scale);
paint.setShadowLayer(1f, 0f, 1f, Color.BLACK);

//draw the text to specific position
Rect bounds = new Rect();
paint.getTextBounds(String.valueOf(getNotificationAmount()), 0, String.valueOf(getNotificationAmount()).length(), bounds);
int x = bitmap.getWidth() - bounds.width();
int y = bitmap.getHeight() - bounds.height();
canvas.drawText(String.valueOf(getNotificationAmount()), x, y, paint);

请注意,位图对象已经作为一个圆圈绘制到画布上,不是这个问题的重点,因此我没有发布该代码。剩下的就是使用 x 和 y 值来获得适当的定位。哦,如果你想把红色矩形放在文本后面,我假设你必须用一个矩形做类似的事情。我希望这可以帮助任何遇到类似问题的人!

于 2013-06-06T21:03:30.753 回答