2015-05-14 13 views
19

Ich zeichne einen Tooltip nach dem Klicken in ein benutzerdefiniertes Balkendiagramm (erstellt mit MPAndroidChart). Die Hierarchie Ansicht ist wie folgtView Außengrenzen nicht ordnungsgemäß zeichnen

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

Während die Ansicht ist innerhalb des Diagramms oder sein inmediate Geschwister, Everthing sieht gut aus. Aber in dem Moment mit seinem Geschwister kollidiert, ist der Tooltip abgeschnittenen

enter image description here

HierarchyViewer Verwendung kann ich sehen, dass der Inhalt vorhanden ist, aber es ist nicht gezeichnet.

Um den Ausschnitt zu bekommen, ich bin mit diesem Code innerhalb

@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(); 
    } 

ziehen Wenn ich Op Region.Op.Replace ändern, ist der Tooltip richtig zeichnen, aber es ersetzt die Toolbar Inhalt, statt Scrollen unter ihm.

enter image description here

+0

Sie Quellcodes Dieser Beitrag könnte? Es sieht gut aus, ich möchte es mir genau ansehen. Danke trotzdem. – SilentKnight

+0

Danke! Aber ich fürchte, ich kann es nicht, Entschuldigung. Ich benutze https://github.com/PhilJay/MPAndroidChart für die Diagramme, aber ich habe einige Teile (speziell die X-Etiketten) angepasst – Maragues

+1

Wahrscheinlich nicht Ihr einziges Problem, aber ich denke, Sie missbrauchen canvas.save(). Sollten Sie es nicht vor Ihrer ersten Übersetzung aufrufen und dann nach dem Beenden die Wiederherstellung aufrufen, anstatt die Übersetzung erneut in die negative Richtung zu rufen. – charliebeckwith

Antwort

1

Hier finden Sie die Grenzen des Gebiets müssen, in dem Sie den Tooltip zu ziehen in der Lage sein wollen, und ich gehe davon aus, dass ein Scroll wäre. Dann können Sie die Tooltip-Grenzen mit der Bildlaufleiste überschneiden, um herauszufinden, was der Clip sein sollte. und wenn es überhaupt gezeichnet werden sollte.

Um es im Code zu erklären es so etwas wie dieses (nicht getestet) wäre:

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); 
} 
Verwandte Themen