Drawable的GradientColor在启动时不会改变

时间:2014-12-23 14:47:53

标签: android gradient

我想在我的标题中添加一个带渐变的drawable:

int h = header_relativeLayout.getHeight();
ShapeDrawable mDrawable = new ShapeDrawable(new RectShape());
LinearGradient lg = new LinearGradient(0, 0, 0, h, getResources().getColor(R.color.SmokeyWhite),
                                       getResources().getColor(searchbarColorID),
                                       Shader.TileMode.REPEAT);
mDrawable.getPaint().setShader(lg);
header_relativeLayout.setBackground(mDrawable);

searchbarColorID是ID中定义的Color i的values/color.xml。上面的代码在onClick-Event按钮上执行时效果很好,但在onResume启动后不能立即执行。他没有设置渐变,而是使用ColorID searchbar完全填充标题。从Log.e我知道他跳转到这段代码,我也知道ColorID与我在sharedpreferences中保存的内容相同,然后才会杀死该应用!

通知 我完成了整个代码,而且我没有设置Background-Color Header_relativeLayout的任何其他地方。

那他为什么要执行上面的代码而不是设置渐变颜色呢?相反,他完全填充了Header_relativeLayout。我想我错过了一个小细节..

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

试试这个:

    final ShapeDrawable mDrawable = new ShapeDrawable(new RectShape());
    ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() {
        @Override
        public Shader resize(int width, int height) {
            Log.d(TAG, "resize >>> " + width + " x " + height + " <<<");
            return new LinearGradient(0, 0, 0, height, Color.RED, Color.GREEN, Shader.TileMode.CLAMP);
        }
    };
    mDrawable.setShaderFactory(shaderFactory);
    View v = new View(this);
    v.setBackground(mDrawable);
    setContentView(v);

请注意,当resize获得最终大小时,系统会调用View v方法,因此即使在onCreate方法中调用

也会有效