약간의 연구 끝에 어떤 뷰의 배경으로도 설정할 수있는이 클래스 PaintDrawable을 발견했으며 놀랍게도이 드로어 블에 셰이프를 설정할 수 있으므로 RoudRectShape을 사용하면 원하는대로 반올림 된 것처럼 보입니다. 최종 코드는 다음과 같습니다.
// mRatios is a View
ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int i, int i1) {
LinearGradient lg = new LinearGradient(0, 0, mRatios.getWidth(), 0,
barColorsArray,
barRatiosArray,
Shader.TileMode.REPEAT);
return lg;
}
};
PaintDrawable paintDrawable = new PaintDrawable();
// not sure how to calculate the values here, but it works with these constants in my case
paintDrawable.setShape(new RoundRectShape(new float[]{100,100,100,100,100,100,100,100}, null, null));
paintDrawable.setShaderFactory(sf);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
mRatios.setBackgroundDrawable(paintDrawable);
} else {
mRatios.setBackground(paintDrawable);
}