2013-02-23 15 views
6

Problema & Domanda:Drawable in vista ottenendo schiacciato

Al momento ho un cercapersone vista, con solo 2 pagine/vista al suo interno, che sono uno accanto all'altro in senso orizzontale.

Le mie viste sono quelle personalizzate che disegnano una sfumatura a due colori e un'immagine sopra di essa con un basso valore di opacità/alfa.

Sto scoprendo che quando faccio scorrere lo schermo per passare dalla prima vista/pagina al secondo o viceversa, le immagini vengono schiacciate. Come posso evitare che ciò accada e disegnarli normalmente?

Esempio:

L'rimasti immagine mostra la prima vista che è visibile, pre-strisciamento; l'immagine a destra mostra le due viste, a metà tramite lo scorrimento.

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

Codice:

Ho una variabile Drawable ho impostato in precedenza, overlayImage, che non ho fatto nulla per diversa impostazione di opacità.

@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

Che tipo di Drawable è il tuo overlayImage? Questo onDraw è parte della tua visualizzazione personalizzata? – Matthieu

+0

"overlayImage" è letteralmente un normale, semplice Drawable; e sì, questo onDraw è parte della mia vista personalizzata. –

risposta

2

Io in realtà penso che sia nella vostra linea

overlayImage.setBounds(canvas.getClipBounds()); 

di codice. Quando si ottengono i limiti della clip della vista più a sinistra (scorrendo più a destra), si ottiene la dimensione dell'area visibile (ovvero l'area di restringimento più piccola) e quindi l'immagine viene disegnata in quello spazio restringente.

Probabilmente si desidera impostare i limiti in base alla dimensione complessiva della vista su cui viene sovrapposto, non ai limiti ritagliati. Usa invece getHeight() e getWidth() della tela e crea i tuoi limiti.

In realtà penso che sia davvero necessario impostare i limiti di sovrapposizione delle immagini SOLO UNA VOLTA nel codice di configurazione. Il codice di estrazione non dovrebbe necessariamente essere impostato, quindi quando la vista inizia a uscire dallo schermo, il disegno della sovrapposizioneImmagine si muoverà naturalmente con il resto della tela del disegno.

0

Penso che avete bisogno di fare un xml nella cartella drawable-hdpi. che conterrà il vostro shader/linear gradiant .. (per le opzioni sembrano 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> 

E poi è possibile impostare il xml come sfondo .. che dovrebbe risolvere il problema credo.

(Se non funziona provare senza la android:shape="rectangle", che potrebbe aiutare)

Problemi correlati