2012-06-07 2 views
4

У меня возникли проблемы с поиском ответа на этот вопрос. Рассмотрим приведенный ниже код отсечения:Понимание обложки холста Android

  boolean is_ok = mycanvas.clipRect(clip_left, clip_top, clip_right+1, clip_bottom+1); 
     mycanvas.getClipBounds(clipRect); 
     if (!is_ok || 
       clipRect.left != clip_left || 
       clipRect.top != clip_top || 
       clipRect.right != clip_right+1 || 
       clipRect.bottom != clip_bottom+1) 
     { 
      Log.i("DEBUG", "setClipping failed"); 
     } 

Когда возвращаются границы клипов, они не соответствуют тому, что было установлено. Например, если clip_left, clip_top, clip_right, clip_bottom (100,50,109, 59), тогда я ожидал бы, что границы отсечения будут (100, 50, 110, 60) с учетом приведенного выше кода. Это не так. getClipBounds() возвращает (100, 51, 110, 60).

Почему top = 51, когда я просто установил его на 50? Что-то под капотом я пока не понимаю.

+0

К сожалению, я должен отметить, что это под Android 4. – Batdude

ответ

6

Хорошо, мне нужно прочитать более четко, прежде чем задавать вопросы. В случае, если кто-то заинтересован, я сам отвечу на это:

При установке нового клипа я предположил, что он заменит предыдущее обрезание. Это НЕ так. Вместо этого он создает пересечение с предыдущим обрезкой. На странице разработчиков Android:

clipRect (плавать слева, плавать сверху, плавать вправо, поплавок внизу)

Intersect текущего клипа с заданным прямоугольником, который выражается в локальных координатах.

+0

Для замены предварительной вырезки, правильный код будет выглядеть так: логический is_ok = mycanvas.clipRect (clip_left, clip_top, clip_right + 1, clip_bottom + 1, область .Op.REPLACE); – Batdude

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