Android ImageView.draw()会留下痕迹

Android ImageView.draw()会留下痕迹,android,android-canvas,Android,Android Canvas,我正在实现图像裁剪功能 我正在绘制裁剪矩形并高亮显示,如下面的代码示例所示。这个aproach在android2.x.x上运行良好。但是对于4.x,我不得不转向硬件加速,因为Canvas.clipPath没有按预期工作 在那之后,我得到了这些痕迹。我对canvas有点陌生,如果有任何帮助,我将不胜感激 代码示例 Rect viewDrawingRect = new Rect(); imageView.getDrawingRect(viewDrawingRect); path.addRect(n

我正在实现图像裁剪功能

我正在绘制裁剪矩形并高亮显示,如下面的代码示例所示。这个aproach在android2.x.x上运行良好。但是对于4.x,我不得不转向硬件加速,因为Canvas.clipPath没有按预期工作

在那之后,我得到了这些痕迹。我对canvas有点陌生,如果有任何帮助,我将不胜感激

代码示例

Rect viewDrawingRect = new Rect();
imageView.getDrawingRect(viewDrawingRect);

path.addRect(new RectF(drawRect), Path.Direction.CW);
canvas.clipPath(path, Region.Op.DIFFERENCE);
canvas.drawRect(viewDrawingRect, hasFocus() ? focusPaint : noFocusPaint);

canvas.restore();
canvas.drawPath(path, outlinePaint);

int left = drawRect.left;
int right = drawRect.right;
int top = drawRect.top;
int bottom = drawRect.bottom;

int widthWidth = resizeDrawableWidth.getIntrinsicWidth() / 2;
int widthHeight = resizeDrawableWidth.getIntrinsicHeight() / 2;
int heightHeight = resizeDrawableHeight.getIntrinsicHeight() / 2;
int heightWidth = resizeDrawableHeight.getIntrinsicWidth() / 2;

int xMiddle = drawRect.left + ((drawRect.right - drawRect.left) / 2);
int yMiddle = drawRect.top + ((drawRect.bottom - drawRect.top) / 2);

resizeDrawableWidth.setBounds(left - widthWidth,
    yMiddle - widthHeight,
    left + widthWidth,
    yMiddle + widthHeight);
resizeDrawableWidth.draw(canvas);

resizeDrawableWidth.setBounds(right - widthWidth,
    yMiddle - widthHeight,
    right + widthWidth,
    yMiddle + widthHeight);
resizeDrawableWidth.draw(canvas);

resizeDrawableHeight.setBounds(xMiddle - heightWidth,
    top - heightHeight,
    xMiddle + heightWidth,
    top + heightHeight);
resizeDrawableHeight.draw(canvas);

resizeDrawableHeight.setBounds(xMiddle - heightWidth,
    bottom - heightHeight,
    xMiddle + heightWidth,
    bottom + heightHeight);
resizeDrawableHeight.draw(canvas);

在绘图之前尝试调用invalidate()方法。这将更新视图。请参考此

我可以发誓我在绘图之前确实无效:)