2016-11-07 6 views
-1

동적 백분율 태그를 사용하여보기에서 다른 색상을 설정하고 모서리 (그림)를 설정하려고합니다. 에만 설정 멀티 색상이 그렇게 아주 쉬운 경우동적 멀티 컬러 및 모서리로 배경보기

enter image description here

, 그냥 마무리 뷰의 폭 %와 설정 색상을 계산합니다. 그러나 나는 모퉁이를 가지고 그렇게하는 법을 모릅니다.

아이디어가 있습니까?

고마워요.

EDIT

내가 쉐이프 용액을 사용하여 아래와 같은 결과가된다. 색상 및 퍼센트 태그 만 업데이트합니다.

내 질문 : 스플릿 라인이 기울어 진 이유는 무엇입니까?

enter image description here

UPDATE가 결과를 얻을 succesw이지만,이 내가 원하는 것이 아니다

.. 내가 다음과 같은 명확한 분할을 얻을 수 있기를 바랍니다

enter image description here

:

enter image description here

+0

다음과 같은 몇 가지 해결책을 발견했습니다. https://azzits.wordpress.com/2013/11/17/customseekbar/ 하지만 내가 원하는 것은 아닙니다. – AlanChien

답변

0

나는 당신이 예상 한 것을 달성했다고 생각합니다. 불행하게도 이러한 드로어 블은 .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 녹색을 얻으려면 녹색 색상을 두 배로하고 위치 00.96f을 전달해야합니다. 그런 다음 orange 색상을 한 번 더 추가하십시오. 검은 색이어야하며 green과 보라색의 차이가 매우 낮아야합니다 (단, orange 색 공간 여야 함).

그런 다음 적절한 설정 반경 : 색상 및 색상 '위치가 동적으로 변경 될 수

p.setCornerRadius(40); 

이 용액을 확장한다.

+0

니스가 거의 있습니다. 이 솔루션이 퍼센트 비율의 색상 배열이나 색상 사전을 허용하도록 조정하면 확장 가능하고 즉시 OP에 재사용 할 수 있습니다. 매개 변수 유형을 조정하고 루프를 추가해야합니다. 지금까지 잘 했어. –

+0

안녕하세요, @ R.zagorski, 저는 답변이 다양합니다. 귀하의 솔루션을 사용하여 문제를 해결하려고했습니다. 하지만 내 편집 질문에 대한 결과 .. 당신은 어떤 아이디어가 있습니까? – AlanChien

+0

'LinearGradient'생성자의 네 번째 매개 변수가 달라야합니다. 답변을 수정했습니다. –