2013-02-23 12 views
6

problemem & pytanie:rozciągliwej Biorąc zgniecenia

I obecnie mają widok pager, z zaledwie 2 stron/poglądów wewnątrz niej, które są obok siebie poziomo.

Moje widoki to niestandardowe, które narysują dwukolorowy gradient i obraz nad nim z niską wartością krycia/alfa.

Zauważyłem, że po przesunięciu palcem po ekranie, aby przejść od pierwszego widoku/strony do drugiego lub odwrotnie, obrazy są przyciśnięte. Jak mogę to powstrzymać i narysować normalnie?

przykład:

lewo obraz przedstawia pierwszy widok, który jest widoczny, wstępnie bezstykowa; Obraz ma dwa widoki: w połowie przeciągnięcia.

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

Kod:

mam Drawable zmienną I ustawiony wcześniej overlayImage, że nie zrobili nic, aby inna niż ustawienie krycie.

@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

Jakiego rodzaju jest opcja Nakładka? Ten onDraw jest częścią twojego niestandardowego widoku? – Matthieu

+0

"overlayImage" jest dosłownie zwykłym, zwykłym Drawable; i tak to onDraw jest częścią mojego widoku niestandardowego. –

Odpowiedz

2

I rzeczywiście myślę, że jest w swoim wierszu kodu

overlayImage.setBounds(canvas.getClipBounds()); 

. Kiedy uzyskujesz granice klipu najbardziej po lewej stronie (przesuwając w prawym górnym) widoku, to uzyskuje on rozmiar widocznego obszaru (to jest mniejszego obszaru kurczenia się), a tym samym obraz jest wciągany do tego kurczącego się obszaru.

Prawdopodobnie chcesz ustawić granice przez całkowity rozmiar widoku, na który jest nałożony, a nie obcięte krawędzie. Zamiast tego użyj getHeight() i getWidth() płótna i stwórz własne granice.

Właściwie uważam, że naprawdę powinieneś ustawić ograniczenia overlayImage TYLKO RAZ w swoim kodzie konfiguracji. Kod remisu nie musi koniecznie ustawiać go w ogóle, a kiedy widok zacznie się wyłączać, rysunek nakładkiImage będzie naturalnie przesuwał się wraz z resztą obszaru roboczego rysunku.

0

myślę, że trzeba dokonać xml w folderze drawable-hdpi. który będzie zawierał swoją shader/linear gradiant .. (dla opcji wyglądać here)

<?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> 

A potem można ustawić jako tło .. xml co powinno rozwiązać problem myślę.

(Jeśli to nie działa, spróbuj bez android:shape="rectangle", które mogłyby pomóc)

Powiązane problemy