我想在我的标题中添加一个带渐变的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。我想我错过了一个小细节..
感谢任何帮助。
答案 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
方法中调用