나는 당신이 예상 한 것을 달성했다고 생각합니다. 불행하게도 이러한 드로어 블은 .xml 형식으로 만들 수 없지만 코드로 수행 할 수 있습니다. 템플릿은 다음과 같습니다.
ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient lg = new LinearGradient(0, 0, width, 0,
new int[]{
ContextCompat.getColor(getContext(), android.R.color.holo_green_light),
ContextCompat.getColor(getContext(), android.R.color.holo_green_light),
ContextCompat.getColor(getContext(), android.R.color.holo_orange_light),
ContextCompat.getColor(getContext(), android.R.color.holo_orange_light),
ContextCompat.getColor(getContext(), android.R.color.holo_red_light),
ContextCompat.getColor(getContext(), android.R.color.holo_red_light),
ContextCompat.getColor(getContext(), android.R.color.holo_purple),
ContextCompat.getColor(getContext(), android.R.color.holo_purple)},
new float[]{0, 0.60f, 0.60f, 0.80f, 0.80f, 0.85f, 0.85f, 1}, Shader.TileMode.REPEAT);
return lg;
}
};
PaintDrawable p = new PaintDrawable();
p.setShape(new RectShape());
p.setCornerRadius(40);
p.setShaderFactory(sf);
위의 몇 가지 세부 사항을 살펴보십시오. LinearGradient를 만들 때 그라디언트 안에 색상 배열과 그 위치를 전달해야합니다. very long
녹색을 얻으려면 녹색 색상을 두 배로하고 위치 0
과 0.96f
을 전달해야합니다. 그런 다음 orange
색상을 한 번 더 추가하십시오. 검은 색이어야하며 green
과 보라색의 차이가 매우 낮아야합니다 (단, orange
색 공간 여야 함).
그런 다음 적절한 설정 반경 : 색상 및 색상 '위치가 동적으로 변경 될 수
p.setCornerRadius(40);
이 용액을 확장한다.
다음과 같은 몇 가지 해결책을 발견했습니다. https://azzits.wordpress.com/2013/11/17/customseekbar/ 하지만 내가 원하는 것은 아닙니다. – AlanChien