2017-02-16 3 views
0

내 도구 모음에 그래디언트를 설정하려고하지만 setSize 및 setGradientCenter가 작동하지 않는 것처럼 보입니다.GradientDrawable 프로그래밍 방식으로 생성 : setSize 및 setGradientCenter 메서드가 작동하지 않습니다.

그라디언트의 중심과 높이가 CMS에서 가져온 값에 따라 다르기 때문에 동적으로 만들어야하지만이 작업을 수행 할 수는 없습니다. 크기와 중심에 대해 설정 한 값이 무엇이든 그라디언트는 항상 전체 도구 모음의 크기를 가져오고 가운데는 기본 도구 모음입니다.

설명서에 나와있는대로 mutate()를 먼저 호출했지만 결과가 없습니다. 또한 같은 결과를 가진 setBounds를 시도했습니다

GradientDrawable gradientDrawable = new GradientDrawable(); 
     gradientDrawable.setOrientation(gradientData.getOrientation()); 
     gradientDrawable.setColors(gradientData.getColors()); 
     gradientDrawable.setGradientCenter(gradientData.getCenterX(), gradientData.getCenterY()); 

toolbar.setBackground(gradientDrawable); 

내가 누락 된 것이 있습니까? 그럴 경우 오리엔테이션은 항상 선형입니다.

+0

사용'ClipDrawable' 당신이 원하는 모든 클립하는 경우 다른 그리기 만들기 그것은 넓은/현재 수준 – pskink

+0

@pskink에 따라 나는 그것을 클립 싶지 않아 짧은 왜냐하면 내가하는 경우 전체 그라데이션을하지 않기 때문에. 예를 들어 끝 색상이있는 경우 클립으로 잘라도 표시되지 않습니다. 그라디언트 효과가 더 빨리 끝나도록 그라디언트를 짧게하거나 수정하십시오. – moyo

+0

그래서 'ScaleDrawable'을 사용하십시오 : * 현재 레벨 값 * – pskink

답변

1

다른 사람들에게 유용 할 수 있도록 코드를 남겨 두겠습니다.

@pskink 예제 덕분에 ScaleDrawable을 사용하여 작동합니다. 지금은 내 도구 모음에 작은 그라데이션을 설정할 수 있습니다

int[] colors = { 
     Color.RED, Color.YELLOW, Color.RED 
}; 

Drawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors); 
final Drawable sd = new ScaleDrawable(gd, Gravity.TOP, 0, 1); 
sd.setLevel(7500); 

toolbar.setBackground(sd); 
관련 문제