2012-08-28 15 views
53

Sto esaminando l'esempio di prova. Dove per qualche sfondo Immagine che stanno utilizzando gradiente, il codice va in questo modoin gradiente Android

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


    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <gradient 
     android:startColor="#ff0000" 
     android:centerColor="#00ff00" 
     android:endColor="#0000ff" 
     android:angle="180"/> 
    <corners android:radius="5dp" /> 
    </shape> 

nel XML di cui sopra non ho avuto l'attributo angle. ma quando cambio il valore di angle leggermente il modello si inclina. qualcuno può spiegarmi come funziona esattamente ........... :)

risposta

120

Il gradiente rappresenta fondamentalmente la variazione di spazio (in una direzione) di qualsiasi quantità. Con il colore rappresenta la variazione dell'intensità del colore in una direzione rappresentata dall'angolo. Ecco alcuni diagrammi per rappresentare questo concetto:
enter image description here

Qui la figura mostra la variazione di colore in senso orizzontale (angolo è impostato 0). Codice
XML:

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <gradient 
     android:startColor="#000000" 
     android:angle="0"/> 
    </shape> 

enter image description here

Qui la figura mostra la variazione di colore in senso orizzontale (angolo è impostata 90).
codice XML:

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<gradient 
    android:startColor="#000000" 
    android:angle="90"/> 
</shape> 

È inoltre possibile utilizzare il colore diverso, come inizio, centro e il fine di colori. Il codice che hai allegato contiene tutti questi elementi.

+17

Grazie per risposta Karn, ma una cosa ho trovato che posso dare solo multipli di 45 in attributo angolo, diversi che blocca cioè 20, 20, 50 ecc –

+0

Ci sono molti modi in cui gradiente può essere espresso. Qui stiamo usando il gradiente lineare (pendenza lungo una linea retta m = (y-y1)/(x-x1)). Quando è multiplo di 45 la variazione in xey è uguale. Può essere causa di questo motivo. Non ne so molto. – karn

+4

Eccellente uso dell'illustrazione che spiega questo! – Ralphleon

3

Specifica un colore sfumato per la forma. attributi:

android: angolo Numero intero. L'angolo per il gradiente, in gradi. 0 è da sinistra a destra, 90 è dal basso verso l'alto. Deve essere un multiplo di 45. Il valore predefinito è 0.

Sembra che la descrizione nella documentazione contraddica la risposta di Karn ??

Potete trovare maggiori dettagli nella documentation

4

si potrebbe desiderare di creare gradiente diagonale dal codice. È molto più semplice e hai molte opzioni aperte da lì. Questo frammento mi ha aiutato

public void SetGradient(View view) { 
     GradientDrawable gd = new GradientDrawable(
       GradientDrawable.Orientation.TL_BR, 
       new int[]{0xFF141a24, 0xFF293f49, 0xFF72554c}); 
     view.setBackground(gd); 
    } 

direzioni disponibili dalla classe GradientDrawable

/*public enum Orientation { 
     *//** draw the gradient from the top to the bottom *//* 
     TOP_BOTTOM, 
     *//** draw the gradient from the top-right to the bottom-left *//* 
     TR_BL, 
     *//** draw the gradient from the right to the left *//* 
     RIGHT_LEFT, 
     *//** draw the gradient from the bottom-right to the top-left *//* 
     BR_TL, 
     *//** draw the gradient from the bottom to the top *//* 
     BOTTOM_TOP, 
     *//** draw the gradient from the bottom-left to the top-right *//* 
     BL_TR, 
     *//** draw the gradient from the left to the right *//* 
     LEFT_RIGHT, 
     *//** draw the gradient from the top-left to the bottom-right *//* 
     TL_BR, 
    }*/ 

e si chiama il metodo da onCreate o onCreateView nel frammento e passare vista padre (nel mio caso).

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.dialog_view_parent, container);   
     ... 

     SetGradient(view); 

     return view; 
    }