【问题标题】:Android mapview (negative coloring)Android mapview(负着色)
【发布时间】:2012-12-13 04:58:48
【问题描述】:

我想在我的 android 应用程序中绘制一个圆形叠加层,我当然可以轻松地完成它并为其添加颜色。

但我真正想做的是保持圆圈透明,并用浅灰色遮住圆圈的外部(世界其他地方)。

我尝试将圆圈添加为路径,为世界添加阴影并将圆圈剪掉,但我的设备上的圆圈周围出现了一个边界框(尽管它在模拟器上看起来不错)。

任何帮助表示赞赏。下面是一段代码sn-p:

public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow);

    Projection projection = mapView.getProjection();

    Point pt = new Point();

    GeoPoint geo = new GeoPoint((int) (mLat * 1e6), (int) (mLon * 1e6));

    projection.toPixels(geo, pt);
    float circleRadius = projection.metersToEquatorPixels(mRadius)
            * (1 / FloatMath.cos((float) Math.toRadians(mLat)));

    Paint innerCirclePaint;

    innerCirclePaint = new Paint();
    innerCirclePaint.setColor(Color.TRANSPARENT);
    innerCirclePaint.setAlpha(35);
    innerCirclePaint.setAntiAlias(true);
    innerCirclePaint.setStyle(Paint.Style.FILL);

    Path path = new Path();
    path.setFillType(Path.FillType.WINDING);
    path.addCircle((float) pt.x, (float) pt.y, circleRadius, Path.Direction.CCW);canvas.drawPath(path, innerCirclePaint);
    canvas.drawARGB(150, 0, 0, 0 );
    canvas.clipPath(path);
}

【问题讨论】:

    标签: android android-mapview


    【解决方案1】:
    paint.setColor(Color.parseColor ("#88ff0000"));
    

    【讨论】:

    • 你是在建议我简单地改变颜色吗?这不起作用!
    • 抱歉 .. 地图上有阴影?
    • 我不确定你的意思?能具体一点吗?
    【解决方案2】:

    试试

    path.setFillType(Path.FillType.INVERSE_WINDING);
    

    而不是

    path.setFillType(Path.FillType.WINDING); 
    

    我尝试了普通图像,这个补丁对我有用

        Canvas canvas = new Canvas(bitmap);
        Paint innerCirclePaint;
    
        innerCirclePaint = new Paint();
        innerCirclePaint.setColor(Color.parseColor ("#88ff0000"));
        innerCirclePaint.setAlpha(35);
        innerCirclePaint.setAntiAlias(true);
        innerCirclePaint.setStyle(Paint.Style.FILL);
    
        Path path = new Path();
        path.setFillType(Path.FillType.INVERSE_WINDING);
        path.addCircle(150, 150, 150, Path.Direction.CCW);
    
        canvas.drawPath(path, innerCirclePaint);
        canvas.drawARGB(0, 0, 0, 0 );
        canvas.clipPath(path);
    

    甚至 clipPath 也可能是一个原因

    Work around Canvas.clipPath() that is not supported in android any more

    【讨论】:

      猜你喜欢
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 2022-12-15
      相关资源
      最近更新 更多