2013-05-31 3 views
0

Я реализую функцию обрезки изображения.Android ImageView.draw() оставляет след

Я рисую прямоугольник обрезки и выделяю как в примере кода ниже. Этот aproach отлично работает с android 2.x.x. Но с 4.x мне пришлось повернуть аппаратное ускорение, потому что Canvas.clipPath не работал должным образом.

После этого я получаю эти тропы. Я как бы новый для холста, и я был бы признателен за любую помощь.

Пример кода

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); 

Trails when dragging

ответ

Смежные вопросы