2016-07-30 4 views
0

Я хочу, чтобы обрезать несколько областей образа, поэтому у меня есть пользовательский класс, расширяющий ImageViewНесколько областей отсечения в холсте?

Это мой OnDraw:

@Override 
protected void onDraw(Canvas canvas) { 

     canvas.clipRect(rect1); 
     canvas.clipRect(rect2); 

    super.onDraw(canvas); 

} 

Когда я клип 1 прямоугольник это работает хорошо, но когда у меня есть многократно он ничего не показывает.

UPDATE:

Я также попытался с помощью отсечения пути вместо этого:

@Override 
protected void onDraw(Canvas canvas) { 

    canvas.clipPath(path1); 
    canvas.clipPath(path2); 

    super.onDraw(canvas); 

} 

Но никто не работает

ответ

2

Я нашел решение, которое с помощью:

canvas.clipPath(Path path, Op op); 

вместо:

canvas.clipPath(Path path); 

С дополнительными клипами, и это также работает с Rect и Region.

Это как мой код выглядит следующим образом:

Path path1 = new Path(); 

private void init(){ 

    path1.moveTo(100, 100); 
    path1.lineTo(100, 500); 
    path1.lineTo(500, 500); 
    path1.lineTo(500, 100); 
    path1.close(); 

} 

@Override 
protected void onDraw(Canvas canvas) { 

    canvas.clipPath(path1); 
    canvas.clipPath(path2, Region.Op.UNION); 
    canvas.clipPath(path3, Region.Op.UNION); 

    super.onDraw(canvas); 

} 
0

Это будет пересекающимся или заменить в ваших прямоугольниках.

Попробуйте использовать clipPath (...) вместо этого.

ie.

Path p1 = ...; 
Path p2 = ...; 
p2.addPath(p1); 
canvas.clipRect(p2); 

Если по какой-либо причине clipPath не работает, тогда создайте область и используйте clipRegion.

Редактировать:

В соответствии с ФОС окончательное решение, также можно объединить регионы в момент добавления вырезанной области:

canvas.clip{whatever}(rect/region/path, op). 
+0

Я попробовал это тоже, но это не сработало. – Khaled

+0

Тогда вам, вероятно, нужно показать, что вы пробовали, потому что это решение – RabidMutant

+0

. Я бы предложил показать, что вы пробовали, включая clipPath и clipRegion – RabidMutant