我在MapField中的位置点周围绘制圆圈,如下面的代码所示:
public void drawCircleMap(int [] radius)
{
int i = 0;
Graphics graphics = null;
int x2,y2;
bmparr = new Bitmap[radius.length];
for(int j=0;j<radius.length;j++)
{
XYPoint fieldOut = new XYPoint();
convertWorldToField(mPoints[1], fieldOut);
x2 = fieldOut.x;
y2 = fieldOut.y;
bmparr[i] = new Bitmap(getWidth(), getHeight());
bmparr[i].createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
graphics = Graphics.create( bmparr[i]);
graphics.setColor(Color.BLUE);
graphics.drawEllipse(x2, y2, x2+radius[j], y2, x2,y2+radius[j], 0, 360);
graphics.fillEllipse(x2, y2, x2+radius[j], y2, x2,y2+radius[j], 0, 360);
i++;
}
}
protected void paint(Graphics graphics) {
super.paint(graphics);
for(int i =0 ;i < bmparr.length;i++)
{
graphics.setGlobalAlpha(100);
graphics.drawBitmap(0, 0, bmparr[i].getWidth(), bmparr[i].getHeight(), bmparr[i], 0, 0);
}
}
我想绘制4个圆圈,现在当我绘制更多圆圈时,地图似乎淡出,有人可以告诉我如何解决这个问题吗?
答案 0 :(得分:1)
我通过为每个位图绘制透明背景来解决这个问题:
bmparr = new Bitmap[radius.length];
for(int j=0;j<radius.length;j++)
{
XYPoint fieldOut = new XYPoint();
convertWorldToField(mPoints[1], fieldOut);
x2 = fieldOut.x;
y2 = fieldOut.y;
bmparr[i] = new Bitmap(getWidth(), getHeight());
bmparr[i].createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
int[] argb = new int[getWidth() * getHeight()];
bmparr[i].getARGB(argb, 0, getWidth(), 0, 0, getWidth(), getHeight());
for(int k = 0; k < argb.length; k++)
{
argb[k] = 0x00000000;
}
bmparr[i].setARGB(argb, 0, getWidth(), 0, 0, getWidth(), getHeight());
graphics = Graphics.create( bmparr[i]);
graphics.setColor(Color.BLUE);
graphics.drawEllipse(x2, y2, x2+radius[j], y2, x2,y2+radius[j], 0, 360);
graphics.fillEllipse(x2, y2, x2+radius[j], y2, x2,y2+radius[j], 0, 360);
i++;
}
答案 1 :(得分:0)
我相信你的问题在于alpha混合。您正在绘制每个图像,一个在另一个上面,大约50%的alpha。因此,第一半径“覆盖”现有像素强度的一半。然后下一个半径覆盖剩余强度的一半,或原始强度的75%。等等...每次绘制图像时,它都会覆盖越来越多的原始强度。
如果您希望所有圈子都具有共同的强度,则需要重新考虑您的方法。例如,考虑在地图顶部绘制之前,在单个位图中绘制所有圆圈。或者考虑让每个较大的圆圈留下100%透明的“洞”,其中较小的圆圈将是。