Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建聊天室样式的ImageView?_Java_Android_Android Imageview - Fatal编程技术网

Java 如何创建聊天室样式的ImageView?

Java 如何创建聊天室样式的ImageView?,java,android,android-imageview,Java,Android,Android Imageview,我创建了一个ImageView子类,它利用BitmapShader,Paint,和Canvas将图像绘制成一个圆圈,创建一个圆形的ImageView感觉和外观。Facebook的聊天室负责人做的一件事就是在他们的ImageView上放置一个通知框,说明有多少条新消息。我想模仿这种外观,并能够在我的CircularImageView上应用通知框。下面是我所说的一个例子: 注意到照片中第一个红色框了吗?我想在我的ImageView上放置类似的内容,但我不确定我将如何进行此操作。也许我可以覆盖onD

我创建了一个
ImageView
子类,它利用
BitmapShader
Paint
,和
Canvas
将图像绘制成一个圆圈,创建一个圆形的
ImageView
感觉和外观。Facebook的聊天室负责人做的一件事就是在他们的
ImageView
上放置一个通知框,说明有多少条新消息。我想模仿这种外观,并能够在我的
CircularImageView
上应用通知框。下面是我所说的一个例子:

注意到照片中第一个红色框了吗?我想在我的
ImageView
上放置类似的内容,但我不确定我将如何进行此操作。也许我可以覆盖
onDraw
方法,并在
canvas
对象上使用
drawText
方法,但如何为文本提供正确的坐标?是相对于
图像视图的坐标吗


因此,总而言之,在
图像视图上放置通知框的最佳方法是什么?

我的问题的解决方案正是我所想的。我必须重写
onDraw
方法,在将
Bitmap
绘制到
Canvas
上一个圆圈后(在我的问题之前已经做过),我只需调用
Canvas
实例上的
drawText
方法,该实例将绘制之前绘制的内容

代码如下:

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值来获得适当的定位。哦,如果你想把红色的长方形放在文本后面,我想你必须对一个长方形做类似的事情。我希望这能帮助任何有类似问题的人

这将是非常有帮助的,如果你能提供你如何裁剪成圆形图像的代码。