Подтвердить что ты не робот

Просмотр внешних границ, которые не отображаются правильно

Я рисую всплывающую подсказку после нажатия внутри пользовательской гистограммы (созданной с помощью MPAndroidChart). Иерархия представления выглядит следующим образом

<LinearLayout>
     <TextView text=Move & Max Pain/>
     <RelativeLayout with 2 textviews>
     <chart
       clipToChildren=false
       clipToPadding=false
     />
</LinearLayout>

Пока представление находится внутри Диаграммы или ее ближайшего родственника, все выглядит хорошо. Но в тот момент, когда он сталкивается со своим родным братом, всплывающая подсказка усекается

enter image description here

Используя HierarchyViewer, я вижу, что содержимое присутствует, но оно не нарисовано.

Чтобы получить обрезку, я использую этот код внутри draw

    @Override
  public void draw(Canvas canvas, float posx, float posy) {
    // take offsets into consideration
    posx += getXOffset();
    posy += getYOffset();

    canvas.save();

    // translate to the correct position and draw
    canvas.translate(posx, posy);

    Rect clipBounds = canvas.getClipBounds();
    clipBounds.inset(0, -getHeight());
    canvas.clipRect(clipBounds, Region.Op.INTERSECT);

    draw(canvas);
    canvas.translate(-posx, -posy);

    canvas.restore();
  }

Если я изменяю Op на Region.Op.Replace, всплывающая подсказка правильно рисует, но вместо содержимого прокрутки заменяет содержимое панели инструментов.

enter image description here

4b9b3361

Ответ 1

Вам понадобятся границы области, в которой вы хотите рисовать всплывающую подсказку, и я предполагаю, что это будет scrollview. Затем вы можете пересечь границы всплывающей подсказки с помощью прокрутки для определения того, что должно быть обрезанием; и если его вообще нужно нарисовать.

Чтобы объяснить это в коде, это будет что-то вроде этого (untested):

Rect scrollViewRect;  // the bounds of your scrollview
Rect tooltipRect;     // the bounds of your tooltip

bool intersects = tooltipRect.intersect(scrollViewRect)
if(intersects)
{
    canvas.clipRect(tooltipRect, Region.Op.REPLACE);
    draw(canvas);
}