Bilder als Buttons

  • Antworten:34
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 1.525

02.05.2013 23:03:51 via Website

Warum soll sich das überschneiden wenn du es richtig setzt und die Grafik richtig malst?
Mac Systems sagte es auch nochmal wie ich es meinte.

Also gehen tut es.

PS: Wenn du sie als Button benutzen willst, heißt es noch lange nicht das du ein Button nehmen musst.
4x ImageView richtig gesetzt und alles geht ohne Probleme mit Touch oder Click.

LG

— geändert am 02.05.2013 23:08:25

  • Forum-Beiträge: 66

03.05.2013 00:57:08 via Website

Wie gesagt, in dem Beispiel mag das gehen, der Kreis hat in der fertigen Ausführung aber bis zu 20 Farben, d.h. ich kann die Buttons nicht einfach einzeln einfügen und zusammensetzen, da sie dann überlappen und so nicht genau getroffen werden können.
  • Forum-Beiträge: 66

03.05.2013 00:59:43 via Website

Man sieht ja in meinem ersten Post, wie das ganze dann aussieht. Durch die Winkel würden viereckige Buttons überlappen was sicherlich Probleme gibt.
  • Forum-Beiträge: 1.727

03.05.2013 10:57:46 via Website

Was mich gerade stört ist das hier die ultimative lösung diskutiert wird anstatt da mal pragmatisch dranzugehen...

Nur mal so als Tip: Du kannst jeden View also auch ein layout mittels http://developer.android.com/reference/android/view/View.html#attr_android:rotation drehen.

Abgesehen davon wenn du jetzt soooo lange damit rum hampelst, wieso machst du es nicht einfacher ? Oder willst du in Schönheit sterben ?

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

  • Forum-Beiträge: 1.727

03.05.2013 10:58:13 via Website

Was mich gerade stört ist das hier die ultimative lösung diskutiert wird anstatt da mal pragmatisch dranzugehen...

Nur mal so als Tip: Du kannst jeden View also auch ein layout mittels http://developer.android.com/reference/android/view/View.html#attr_android:rotation drehen.

Abgesehen davon wenn du jetzt soooo lange damit rum hampelst, wieso machst du es nicht einfacher ? Oder willst du in Schönheit sterben ?

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

  • Forum-Beiträge: 66

03.05.2013 11:55:08 via Website

Du verstehst mich falsch, es geht nicht um die perfekte Lösung aber ich möchte wenigstens eine Lösung, die fehlerfrei funktioniert. Das mit der Rotation ist ja schön und gut, nichtsdestotrotz überlappen die Views dann trotzdem, da die Buttons immer viereckig sind.

Wenn ich falsch liege, dann berichtige mich bitte aber ich denke mit Geometrie komme ich noch ganz gut klar.

Hier nochmal zur Verdeutlichung:



Wie du siehst überlappen die Buttons, wenn ich jedes einzelne Feld als View einfüge. Wenn ich außen klicke mag das nicht unbedingt stören, da die Displays der Geräte aber sehr klein sind wird problematisch.

— geändert am 03.05.2013 12:21:32

  • Forum-Beiträge: 1.525

03.05.2013 12:29:10 via Website

Wenn das dann wirklich so komisch ist.

Dann bleibt dir halt nur noch X- und Y übrigt.
Und das alles in einem Bild halt.


LG
  • Forum-Beiträge: 66

03.05.2013 12:37:04 via Website

Leider ja. Technisch bedingt können Bilder leider nur viereckig exportiert/erstellt werden und Android Buttons sind auch immer nur viereckig. Deswegen bleibt letztendlich nur noch die Möglichkeit mit Koordinaten in einem Bild zu arbeiten und die Pixelfarbe abzufragen. Nur eben genau da hapert es bei mir. Wie muss die onTouch Methode aussehen um da umzusetzen? Ich weis, dass das Bild irgendwie in Bitmap konvertiert werden muss und die Pixelabfrage anhand der Motionevents funktioniert nur hat bisher keine meiner Versuche funktioniert.
  • Forum-Beiträge: 1.727

03.05.2013 12:53:52 via Website

da die Displays der Geräte aber sehr klein sind wird problematisch.


Und daher ist das auch schon dein eigentliches Problem. Das Design Skaliert nicht, bzw auf kleinen Devices, selbst mit deiner forcierten Lösung
wird es schwer für den Otto Normal User das zu verstehen. Dir ist klar das du Buttons mindest 48DP groß halten sollst, klickst du in die Mitte
ist das aber nicht unbedingt gegeben. Ich würde das einfach verwerfen und eine ANDERE Lösung dafür finden. Design lernte mich oftmals
Dinge die Ich Programmieren kann nicht zu tun, da der Enduser das nicht nutzten kann, bzw der "Mehrwert" den Aufwand nicht lohnt.

Aber da du dich ja gut mit Geometrie auskennst sollte das wirklich kein Thema sein festzustellen wo der Click denn jetzt war. Schreib dir einen Unit Tests der ohne UI Auskommt wo du genau diese Logic implementierst dann musst du in deiner onClick nur noch die Logic aufrufen und die liefert dir die ID oder was auch immer des Buttons zurück!

— geändert am 03.05.2013 13:33:12

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

  • Forum-Beiträge: 66

03.05.2013 22:08:17 via Website

Dir ist klar das du Buttons mindest 48DP groß halten sollst, klickst du in die Mitte
ist das aber nicht unbedingt gegeben.

Das mit der Größe ist erstmal nicht das Problem, da die App für ein 10" Tablet ausgelegt und da genug Platz ist.

Aber da du dich ja gut mit Geometrie auskennst sollte das wirklich kein Thema sein festzustellen wo der Click denn jetzt war. Schreib dir einen Unit Tests der ohne UI Auskommt wo du genau diese Logic implementierst dann musst du in deiner onClick nur noch die Logic aufrufen und die liefert dir die ID oder was auch immer des Buttons zurück!

Genau hier liegt mein Problem, da ich erst mit dem Programmieren begonnen habe...

Naja ich schaue mal ob ich es nicht doch noch hinbekomme!
  • Forum-Beiträge: 66

05.05.2013 13:29:11 via App

Danke für den Hinweis. Den Link (und viele weitere) habe ich mir bereits angesehen nur irgendwie komme ich mit der syntax nicht ganz klar.

Also das mit dem Koordinaten hnd der anschließende Teil mit den Farben ist denke ich nicht das Problem. Woran ich scheitere ist der Teil mit dem Bitmap.

In deinem Beispiel sieht das so aus:

ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);

Kannst du (oder jemand anderes) mir vielleicht kurz erklären, was hier gemacht wird bzw. das resultat daraus ist? Muss ich nicht auch irgendwomangeben, um welches Bild es sich handelt? Ich habe bisher immer unterschiedliche Ausführungen gefunden weshalb ich nicht ganz durchblicke.
  • Forum-Beiträge: 1.793

05.05.2013 18:23:39 via App

Ein Bitmap ist ein Bild. Über getPixel() bekommst du die Farbe des jeweiligen Pixels an x/y als int. Doch woher bekommt man nun das Bitmap-Objekt? Du könntest es über BitmapFactory.decodeResource(..) aus deinem res.drawable holen, über BitmapFactory.decodeStream aus einem Stream usw. Oder aber du fragst den Bitmap eines ImageView ab, welches die zweite Zeile tut. Das ImageView kommt aus der ersten Zeile. diese kommt wahrscheinlich aus einer onTouch-Methode, da diese das.Objekt, auf welches gedrückt wurde mitliefert. (Als Parameter v). Da eine onTouch Methode auf jeder View gesetzt werden kann, ein Button aber keinen Bitmap zurückliefern kann, wird nochmal dem Compiler gesagt, dass v ein ImageView ist, bzw. es wird in ein ImageView umgewandelt.

Gruß

— geändert am 05.05.2013 18:25:32

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

  • Forum-Beiträge: 66

05.05.2013 19:30:02 via Website

@impjor

Vielen vielen Dank, ich denke jetzt hab ichs. Nur eine Frage stellt sich mir noch. Das mit dem Bitmap macht ja Sinn bezüglich der Farben. Muss ich meine Imageview dann auch als Bitmap im drawable Ordner speichern oder wird das hier automatisch nach Bitmap konvertiert?