避免在api v10和api v14上使用xfermode

时间:2013-03-22 08:06:25

标签: android android-canvas xfermode

在地图活动中,我使用Cnavas

创建了在Paint上绘制形状的叠加层

形状由点和线组成

linePaint = new Paint();
    linePaint.setColor(mContext.getResources().getColor(R.color.Line));
    linePaint.setStyle(Paint.Style.STROKE);
    linePaint.setStrokeWidth(strokeWidth);
    linePaint.setXfermode(avoidXfermode);
    linePaint.setFlags(Paint.ANTI_ALIAS_FLAG);

    mPointPaint = new Paint();
    mPointPaint.setColor(pointColor);
    mPointPaint.setFlags(Paint.ANTI_ALIAS_FLAG);

我也定义AvoidXfermode以避免点与线重叠(点必须“在顶部”)

avoidXfermode = new AvoidXfermode(pointColor, 255, Mode.AVOID);

以32b格式在资源中定义的颜色

<color name="Point">#FFFF0000</color>
<color name="Line">#FF4169E1</color>

问题是:它在带有api 10的设备上运行正常,但在带有api v14(具有任何容差)的Nexus下它根本不起作用

我做错了什么?

1 个答案:

答案 0 :(得分:1)

硬件加速不支持AvoidXfermode。

您可以使用View.isHardwareAccelerated()确定它,并使用View.setLayerType(LAYER_TYPE_ *)进行设置。虽然您可能需要寻找替代方案。

您可以在此处阅读http://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported