2013-02-23 14 views
6

Problem & Frage:Drawable in Aussicht zerquetscht zu werden

Im Moment habe ich einen Blick Pager, mit nur 2 Seiten/Blick hinein, die horizontal nebeneinander sind.

Meine Ansichten sind benutzerdefinierte, die einen Zwei-Farben-Farbverlauf und ein Bild über die Oberseite mit einem niedrigen Deckkraft/Alpha-Wert zeichnen.

Ich finde, wenn ich über den Bildschirm wische, um von der ersten Ansicht/Seite zur zweiten oder umgekehrt zu gehen, werden die Bilder gequetscht. Wie kann ich das verhindern und normal zeichnen?

Beispiel:

Die Bild links zeigt die erste Ansicht, die sichtbar ist, pre-Swipe; Die rechts Bild zeigt die beiden Ansichten, in der Mitte durch Swipe.

Normal viewSquashed views, as I'm mid-way through swiping

Code:

Ich habe eine Drawable Variable I früher gesetzt, overlayImage, dass ich nichts anderes als die Einstellung Opazität getan haben.

@Override 
protected void onDraw(Canvas canvas) { 
    p.setShader(new LinearGradient(0, 0, 0, getHeight(), startColor, endColor, Shader.TileMode.MIRROR)); 
    canvas.drawPaint(p); 

    //Pretty sure the mistake is around these two next lines 
    overlayImage.setBounds(canvas.getClipBounds()); 
    overlayImage.draw(canvas); 
} 
+0

Welche Art von Drawable ist Ihr overlayImage? Dieses onDraw ist Teil Ihrer benutzerdefinierten Ansicht? – Matthieu

+0

"overlayImage" ist buchstäblich nur ein normales, einfaches Drawable; und ja, diese onDraw ist Teil meiner benutzerdefinierten Ansicht. –

Antwort

2

Ich glaube tatsächlich, es in Ihrem ist

overlayImage.setBounds(canvas.getClipBounds()); 

Codezeile. Wenn Sie die Clip-Begrenzungen der Ansicht ganz links (Wischen nach rechts) erhalten, wird die Größe des sichtbaren Bereichs (d. H. Der kleinere Verkleinerungsbereich) angezeigt, und somit wird das Bild in diesen schrumpfenden Bereich gezeichnet.

Sie möchten wahrscheinlich die Grenzen durch die Gesamtgröße der Ansicht festlegen, über die sie überlagert wird, nicht die abgeschnittenen Grenzen. Verwenden Sie stattdessen getHeight() und getWidth() der Zeichenfläche und erstellen Sie eigene Grenzen.

Ich denke tatsächlich, dass Sie die OverlayImage-Grenzen nur einmal in Ihrem Setup-Code einrichten sollten. Der Zeichencode sollte das nicht unbedingt einstellen müssen. Wenn die Ansicht beginnt, sich vom Bildschirm zu entfernen, wird sich die Zeichnung von overlayImage natürlich mit dem Rest der Zeichenfläche bewegen.

0

Ich glaube, dass Sie einen xml im drawable-hdpi Ordner vornehmen müssen. Welches ist Ihr shader/linear gradiant enthalten ..

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <gradient 
     android:startColor="#474946" 
     android:endColor="#181818" 
     android:angle="270"/> 
</shape> 

(für Optionen here anschauen) Und dann können Sie die xml als Hintergrund .., die das Problem, das ich denke, beheben sollte.

(Wenn es versuchen, funktioniert nicht ohne die android:shape="rectangle", die helfen könnten)