Der Erfolg einer App hängt maßgeblich davon ab, wie sie sich dem Nutzer präsentiert. der Vortrag beleuchtet die Möglichkeiten von Android, außergewöhnliche Custom-Widgets, 3-D-Animationen und grafische Effekte aufzuwerten. Der Vortrag enthält jede Menge Beispielcode, Performancetipps und Best Practices.
2. Mobile Development
Android
ingress Level 6
dominik-helleberg.de/+
Dominik
Helleberg
Jonas
Gehring
Mobile Development
Android
JavaScript
https://github.com/jjoe64
http://www.jjoe64.com
4. This is what happens when you let developers create UI
http://www.codinghorror.com/blog/2006/11/this-is-what-happens-when-you-let-developers-create-ui.html
11. How to use Holo - Grids
https://developer.android.com/design/style/metrics-grids.html
<resources>
<!-- Default screen margins,
per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name=“ui_gap“>8dp</dimen>
<dimen name=“element_height“>48dp</dimen>
</resources>
res/values/dimens.xml
12. Theme.Holo
● existiert seit API Level 11 (Honeycomb)
● erst ab API Level 14 (ICS) garantiert unverändert durch OEM
Vorschlag
● Ab Api Level 11 Theme.Holo verwenden (hell: Holo.Light)
● Frühere Api Level verwenden Theme.Black. (hell: Theme)
13. android:
Theme.Black
Das richtige Theme zur Laufzeit automatisch auswählen
res/values/ res/values-v11/ res/values-v14/
android:
Theme.Holo
android:
Theme.Holo
android:
Theme.MyTheme
17. Verschiedene Themes sind nun unter einem gemeinsamen
Namen ansprechbar.
<activity
android:theme="@style/Theme.MyTheme.Light.NoTitleBar“
...
Verwendung in der AndroidManifest.xml
27. Zusammenfassung
Befolgen der Design-Guidlines
● Verwenden der Standard-Widgets
● Verwenden der Standard-Patterns
● Verwenden des Standard-Themes
● Verwenden der Standard-Farbpalette
● Verwenden von Responsive Design Techniques
Gefahr
● Gestaltung der App hebt sich womöglich kaum ab
Wie differenzieren?
● Qualität
● Wir sorgen dafür, dass sich die App gut anfühlt
28. Was heißt gut anfühlen?
● klare logische UI Struktur
● Die App ist responsive und snappy
● Animationen
● Grafische Effekte, eigene Widgets (wo es
sinnvoll ist)
30. public class ExampleView extends View {
public ExampleView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.RED);
}
}
Most Simple Custom View
31. @Override
public boolean onTouchEvent(MotionEvent event)
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
@Override
protected void onMeasure(int widthMeasureSpec, int
heightMeasureSpec)
Größenabhängige Berechnungen
Spezielle Anforderungen an die Abmessungen
Touch Events
Einige wichtige Methoden
32. Canvas API
● Formen (Linien, Ellipsen,
Rechtecke etc)
● Text
● Bitmaps
● Zeichenmatrix (Position,
Größe, Drehung)
Paint API
● Gradienten (Kreis und
Linear)
● Effekte (Blur,...)
● Farbfilter
● Vermessen von Text
● Texteigenschaften
● Farbe, Muster, Dicke
von Formen
View Drawing
44. 2.x ? NineOldAndroids
Usage
The API is exactly the same as the Honeycomb API, just change
your imports to use com.nineoldandroids.animation.*
http://nineoldandroids.com
46. ab 4.1 -> view.setHasTransientState(true);
Alternative:
Custom Adapter
oder
ListViewAnimations-Lib von Niek Haarman
https://bitbucket.org/nhaarman/listviewanimations/
ListViewAnimations
48. Vermeide Canvas.drawText ()
● Zeilenumbrüche
● Zeilenabstände
● Vermessen und Positionieren des Textes
Dafür gibt es Hilfsklassen!
StaticLayout: Mehrzeiliger Text der sich nicht ändert
DynamicLayout: Mehrzeiliger Text der sich ändert
BoringLayout: Einzeiliger Text der sich nicht ändert
Example: ExampleCanvasText
49. Tipps und Tricks
● Bei beliebten Apps abgucken
● onDraw leichtgewichtig lassen
● invalide(Rect) statt invalide()
● Bitmap Caching
● nicht sinnlos malen
● Advanced: Surface View
○ onDraw über eigenen Thread
50. Summary
Stick with Holo
Use defaults unless you're a designer
Use the techniques from design.android.com
OEM Themes DO suck
Add Custom Views / ViewGroups / Animations
to differentiate, but do it right