2013-01-17 1 views
3

EDIT: Regardez solution ci-dessusapplications: centre de changement de GradientDrawable linéaire par code

i m flipper. tout ce que je veux juste faire, est de mettre en place un GradientDrawable linéaire, qui change le centre vertical du dégradé ... dessiner le dégradé fonctionne bien, mais comment puis-je changer le centre de celui-ci?!?

RelativeLayout bgScreen = (RelativeLayout) findViewById(R.id.player_screen); 

GradientDrawable gd = new GradientDrawable(
    GradientDrawable.Orientation.TOP_BOTTOM, 
    new int[] {startColor,endColor}); 

gd.setCornerRadius(0f); 
gd.setAlpha(200); 
bgScreen.setBackground(gd); 


public void redrawOrChangeBackgroundGradient(){ 
    //??? either change center of existing 
    gd.setGradientCenter(float x, float y) //ONLY works in RADIAL_GRADIENT or SWEEP_GRADIENT. 

    //??? or complete redraw Gradient with different center 

} 

s ici un exemple d'image de la façon dont je veux changer le gradient via le code

enter image description here

ne peut pas être si difficile, peut-il?

Répondre

2

La capacité manquante de définir le centre par programme pour GradientDrawable s est déjà registered issue. Il existe cependant une solution de contournement described here. Fondamentalement, vous devez créer un PaintDrawable à partir d'un LinearGradient et le définir comme arrière-plan de votre vue. À la suite de cette solution, vous pouvez définir le centre dans votre LinearGradient constructeur en cartographiant les couleurs au tableau positions:

float [] positions

Peut être nul. Les positions relatives [0..1] de chaque couleur correspondante dans le tableau de couleurs. Si cette valeur est nulle, les couleurs sont réparties uniformément le long de la ligne de dégradé.

(non testé, mais il devrait faire l'affaire pour vous)

Questions connexes