Agenda
• Why do we need it?
• What is Material Design?
• New patterns
• How do I start?
Slide 3
Slide 3 text
+DavidGonzalezMalmstein
malmstein
David González
Technical Product Owner at Novoda
@dggonzalez
Google Developer Expert for Android
Slide 4
Slide 4 text
4
Slide 5
Slide 5 text
Why?
Bad user experience
Bad platform experience
Design inconsistency
Slide 6
Slide 6 text
Material Design
Slide 7
Slide 7 text
Goals
Unified experience across platforms and different
device sizes
Visual language that synthesises classic principles
of good design
Provide guidelines in order to create appealing
Android applications
Slide 8
Slide 8 text
Material is a metaphor Bold, graphic, intentional Motion provides meaning
Material principles
Palette API
27
dependencies {
compile ‘com.android.support:palette-v7:21.0.+'
}
build.gradle
Palette p = Palette.generate(bitmap);
Palette.generateAsync(bitmap, new
Palette.PaletteAsyncListener() {
public void onGenerated(Palette palette) {
// Do something with colors…}
}
);
MainFragment.java
Slide 28
Slide 28 text
Toolbar
Slide 29
Slide 29 text
Toolbar in Material
29
Toolbar toolbar = (Toolbar)
findViewById(R.id.my_awesome_toolbar);
setActionBar(toolbar);
res/layout/toolbar.xml
MainActivity.java
Activity transition
46
<!-- specify enter and exit transitions -->
<item name=“android:windowEnterTransition">
@transition/explode</item>
<item name=“android:windowExitTransition”>
@transition/explode</item>
res/values/theme.xml
The easy way
Shared element transition
48
<!-- specify shared element transitions -->
<item name=“android:windowSharedElementEnterTransition”>
@transition/change_image_transform</item>
<item name=“android:windowSharedElementExitTransition”>
@transition/change_image_transform</item>
res/values/theme.xml
The hard way
Slide 49
Slide 49 text
Shared element transition
49
res/layout/fragment_sample.xml
res/transition/my_transition.xml
Slide 50
Slide 50 text
Start the Activity
50
imgContainerView.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(this, Activity2.class);
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(this,
androidRobotView,
transitionName);
startActivity(intent, options.toBundle());
FragmentSample.java
Slide 51
Slide 51 text
How to start
Slide 52
Slide 52 text
Learn the theory
Slide 53
Slide 53 text
Look for inspiration
Slide 54
Slide 54 text
Practice on Paper
Slide 55
Slide 55 text
Priorities
Slide 56
Slide 56 text
Iterate, and do it fast
Slide 57
Slide 57 text
Questions?
Thank you!
Slide 58
Slide 58 text
Further reading
• Novoda Blog on Material Design
• Material Design Guidelines
• Intro to Material Design
• Material Design Checklist
• Material Design for Pre-Lollipop with AppCompat
• Nick Butcher and Chris Banes at Droidcon UK 2014