Collor-Seek-Bar

  • Antworten:2
  • Bentwortet
Hermann S.
  • Forum-Beiträge: 45

11.12.2011, 00:46:50 via Website

Hallo, ich möchte mir einen Color-Picker mit einer Seekbar realisieren. Dafür lege ich erst mal ein Farbfeld als Seekbar-Hintergrund (Siehe Beispiel);

1...
2convertView = mInflater.inflate(R.layout.farbe, null);
3 seekBar = (SeekBar)convertView.findViewById(R.id.farbe_sb_seek);
4
5 float xPosStart = 0.f;
6 float yPosStart = 0.f;
7 float xPosEnd = seekBar.getWidth();
8 float yPosEnd = 0.f;
9 LinearGradient test = new LinearGradient(
10 xPosStart, yPosStart, xPosEnd, yPosEnd,
11 new int[] { 0xFF000000, 0xFF0000FF, 0xFF00FF00, 0xFF00FFFF, 0xFFFF0000, 0xFFFF00FF, 0xFFFFFF00, 0xFFFFFFFF},
12 null, TileMode.CLAMP);
13 ShapeDrawable shape = new ShapeDrawable(new RectShape());
14 shape.getPaint().setShader(test);
15
16 seekBar.setProgressDrawable( (Drawable)shape );
17 seekBar.setOnSeekBarChangeListener(seekBarChangeListener);
18...

Leider erhalte ich für "xPosEnd = seekBar.getWidth();" eine 0. Die Breite wird im SeekBar Listener aber richtig geholt. Vermutlich ist die View zu dem Zeitpunkt noch nicht gezeichnet, daher ist der Wert für xPosEnd nicht bekannt. Habe leider keine Idee, wie man die Breite sonst bestimmen könnte. Hätte jemand einen Tipp für mich?

— geändert am 11.12.2011, 00:50:27

Antworten
Maximilian O
  • Forum-Beiträge: 990

11.12.2011, 10:17:11 via App

Heyho, leider ist die einzige Möglichkeit die breite einer view während der Laufzeit zu bekommen, mit einem runnable. So zusagen führst du die Aktion damit dann kurz nach dem zeichnen aus. Oder, wenn du die margins genau kennst, kannst du ja dip zurück in Pixel rechen. Was aber nicht sehr elegant ist.
Mfg Maximilian

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Hermann S.
  • Forum-Beiträge: 45

11.12.2011, 11:08:30 via Website

Leider benutzt die Seekbar fill_parent im Layout, die Breite kann daher nicht abgeleitet werden. Muss mir, so wie es aussieht, einen Weg über Runnable überlegen. Danke :)

NACHTRAG: Hab das Problem etwas anders gelöst. Wenn man anstelle von dem LinearGradient den GradientDrawable nimmt, muss man keine Maßangaben machen. Der Hintergrund des Suchbalkens wird automatisch gefüllt.

— geändert am 12.12.2011, 21:38:07

Antworten