DPI Zahl + Bilder Skalieren

  • Antworten:2
Mac Systems
  • Forum-Beiträge: 1.727

03.01.2011, 13:48:23 via Website

Hallo,

irgendwie steige Ich nicht dahinter wie Android das ganze handhabt.
Angenommen mein Screen hat ne breite von 480px und 240dpi auf dem liegen jetzt 3 Buttons nebeneinander:

<ImageButton android:id="@+id/matchType1Button"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/red_match_button_selector"
/>

<ImageButton android:id="@+id/matchType2Button"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/straw_match_button_selector"
/>

<ImageButton android:id="@+id/matchType3Button"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/blue_match_button_selector"
/>

Die summe der Breite der Bilder die auf den Buttons verwendet werden ist größer als 480px, das soll android ja handhaben, wieso allerdings werden bei mir dann nicht alle ImageButton gezeigt ?

PS: Auf den ImageButtons liegen selectoren nur um das klar zustellen.

mfg,
Mac

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

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

04.01.2011, 23:39:24 via Website

Den entsprechenden Abschnitt in den Docs kennst Du ja.

The platform assumes that default resources are designed for proper display at the baseline screen density of "medium" (160)

Z.B.: Deine Grafik hat 200 Pixel Breite, Du hast sie im default resource folder abgelegt, Dein Screen ist 480x800 und damit medium density. In diesem Fall nimmt Android an dass Du die Grafik genau so haben möchtest wie Du sie erstellt hast und skaliert nicht.

Wenn Du jetzt ein Gerät mit extra high density hast (=320), dann wird Android Deine Grafik auf 400 Pixel verbreitern, damit sie relativ gesehen genauso groß ist wie wenn sie auf einem Medium Density Screen dargestellt wird.

Zumindest verstehe ich die Dokumentation so. Hab das noch nie so genau auspropiert und mach die Skalierung immer von Hand. Wie Android das handhabt ist mir ehrlich gesagt zu komplex...

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

05.01.2011, 02:25:47 via Website

Hallo,

ja die 160 DPI werden als Default gesehen, auch ist das rechnen mit DPI ansich kein Thema "density * DPI-Wert" und man hat den gewünschten wert.
Allerdings ist es doch so das ein scale von hand nicht gerade immer das ist was hier angebracht sein sollte, die "macher" haben sich ja was dabei gedacht.
Gerade wie beim nutzen eines selectors ist das ganze ja recht einfach, das per code nach zustellen oftmals eher mühsam.

Aufgefallen ist mir vor allem folgendes : Sind die Grafiken größer als die Breite des Screen (das können eine oder auch mehrere nebeneinander sein) verhält sich Android komisch. Habe Ich eine breite von 480 Pixeln und ein Bild von 600px breite wird es zwar skaliert aber das gesamte Layouting verhält sich anders.
Das lässt sich prima mit einem ImageView testen. In meinem Fall rutsch das ImageView immer nach oben. Skaliere ich vorher selbst (Photoshop/Gimp) passt es dann wieder. Irgendwie macht das wenig sinn, zumal die breite des Device ja an sich unbekannt ist, auch kann ich durch dieses verhalten ja nicht grundsätzlich alle Grafiken vorher ablegen (wie groß soll die APP dann bitte werden ?). Das dass Layouting komplexer ist wie in den meisten Büchern beschrieben ist wohl auch klar.

Bin jetzt hingegangen und habe drei AVD erstellt 120/160/240 DPI, und bekomme auch Ergebnisse wie gewünscht, sehe aber irgendwo nicht den vortei wenn ich oftmals die Grafiken dreimal ablegen muss. Es mag ja sinn machen einige Grafiken gut aussehen zu lassen, aber doch nicht jede für einen selector. In dem Kontext wird oftmals geraten Draw9 Patches zu verwenden, was aber wenn das keine geeignete Lösung darstellt ?

Schön wäre mal eine gute Aussage hierzu zu finden...

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

Antworten