2012-12-24 12 views
13

Według tego, co czytałem, można użyć gradientDrawable i mają trzy kolory ustawione dla niego, na przykład:Korzystanie z gradientDrawable z więcej niż trzech kolorach ustawić

<gradient startColor="#00FF00" centerColor="#FFFF00" endColor="#FFFFFF"/> 

ale co jeśli chcę więcej niż trzy kolory, i nie tylko to, chcę być w stanie ustalić, gdzie umieścić każdy (waga/procent)?

Czy jest to możliwe za pomocą interfejsu API lub czy mogę utworzyć własny niestandardowy program do rysowania? Jeśli muszę wykonać własne niestandardowe losowanie, jak mam to zrobić?

+0

myślę, że można znaleźć odpowiedź [tutaj] (http: //stackoverflow.com/questions/4381033/multi-gradient-shapes). – Androidz

Odpowiedz

15

umieścić ten kod w metodzie swojej onCreate():

ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() { 
    @Override 
    public Shader resize(int width, int height) { 
     LinearGradient linearGradient = new LinearGradient(0, 0, width, height, 
      new int[] { 
       0xFF1e5799, 
       0xFF207cca, 
       0xFF2989d8, 
       0xFF207cca }, //substitute the correct colors for these 
      new float[] { 
       0, 0.40f, 0.60f, 1 }, 
      Shader.TileMode.REPEAT); 
     return linearGradient; 
    } 
}; 
PaintDrawable paint = new PaintDrawable(); 
paint.setShape(new RectShape()); 
paint.setShaderFactory(shaderFactory); 

i używać tej rozciągliwej jako tło.

Możesz dodać więcej niż trzy kolory w xml również poprzez tworzenie warstw. Ale w XML jest dość skomplikowany.

+0

to wygląda całkiem nieźle, ale jak z niego korzystać? również, czy możliwe jest posiadanie go jako niestandardowego losowania? –

+0

Podobnie, jeśli musisz ustawić tło paska akcji: getActionBar(). SetDisplayOptions (ActionBar.DISPLAY_SHOW_CUSTOM); getActionBar(). SetBackgroundDrawable (paint); lub jeśli masz przycisk: // zdefiniować przycisk w pliku ur xml z Id jako przycisk Przycisk Button = (Przycisk) findViewById (R.id.button); button.setBackgroundDrawable ((Drawable) paint); – Bhaskar

+0

wydaje się to bardzo fajne. więc jeśli chcę mieć dostosowaną opcję do rysowania, wszystko co muszę zrobić, to rozszerzyć PaintDrawable, a następnie umieścić kod, który ustawiłeś, tylko po to, aby ustawić go sam? –

1

Myślę, że poniższe rozwiązania są możliwe.

  • Można tworzyć wiele kształtów z gradientami i tworzyć większy kształt .
  • Możesz utworzyć własną GradientDrawable rozszerzając GradientDrawable Class odwołać się do poniższego dokumentu.

  • Gradient Drawable Documentation

+0

Czy możesz pokazać próbkę tego, jak zrobić drugą? –

2

Nie jest możliwe do zrobienia w pliku xml, ale można zastosować +3 koloru gradientu w yout kodu java z GradientDrawable Klasa:

GradientDrawable gradientDrawable = new GradientDrawable(
       Orientation.TOP_BOTTOM, 
       new int[]{ContextCompat.getColor(this, R.color.color1), 
         ContextCompat.getColor(this, R.color.color2), 
         ContextCompat.getColor(this, R.color.color3), 
         ContextCompat.getColor(this, R.color.color4)}); 

     findViewById(R.id.background).setBackground(gradientDrawable); 
+0

Jest to również dobre rozwiązanie i krótkie. –

Powiązane problemy