Android: Change center of linear GradientDrawable

2019-01-28 09:12发布

EDIT: LOOK AT SOLUTION ABOVE

i m freaking out. all i just want to do, is setting a linear GradientDrawable, which changes the vertical center of the gradient... drawing the gradient works fine, but how can i change the center of it?!?

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

}

here s a picture example of how i want to change the gradient via code

enter image description here

cannot be that hard, can it?

1条回答
ら.Afraid
2楼-- · 2019-01-28 09:57

The lacking ability to set the center programmatically for linear GradientDrawables is a registered issue already.

But there is a workaround described here. Basically, you should create a PaintDrawable from a LinearGradient and set it as your view's background drawable. Following this solution, you can set the center in your LinearGradient constructor by mapping the colors to the positions array:

float[] positions

May be null. The relative positions [0..1] of each corresponding color in the colors array. If this is null, the colors are distributed evenly along the gradient line.

(not tested, but it should do the trick for you)

查看更多
登录 后发表回答