101
Material Design

Material Design+Develop Android

Embed Size (px)

DESCRIPTION

Material Design+Develop Android

Citation preview

Page 1: Material Design+Develop Android

Material Design

Page 2: Material Design+Develop Android

Material Design

Develop

Page 3: Material Design+Develop Android

Chet Haase Rich Fulcher

Page 4: Material Design+Develop Android

Color & Themes

Page 5: Material Design+Develop Android

We’ve created an extensive palette with beautiful colors as an aid to choose a good color theme

Color palette

Page 6: Material Design+Develop Android

Bold use of primary color

Bold and immersive use of color in large fields in the UI is strongly encouraged

Page 7: Material Design+Develop Android

Color density

Densities depend on content - list vs. imagery vs. bold color fields

Page 8: Material Design+Develop Android

Examples

Page 9: Material Design+Develop Android

Accent color

Highlight important buttons or parts of the UI with a complementary accent color

Page 10: Material Design+Develop Android

Accent color applied to controls

Page 11: Material Design+Develop Android

DevelopmentThemes

Demo!

Page 12: Material Design+Develop Android

To Live in a Material World<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Material" >

Standard Material theme

Page 13: Material Design+Develop Android

To Live in a Material World<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Material" >

Standard Material theme

Page 14: Material Design+Develop Android

Material world (2)

<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >

Customized theme

Page 15: Material Design+Develop Android

Material world (2)

<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >

Customized theme

<resources> <style name="AppTheme" parent="android:Theme.Material.Light"> <!— item overrides —> </style> </resources>

styles.xml

Page 16: Material Design+Develop Android

Colorizing assets<style name="BaseAppTheme" parent="android:Theme.Material.Light"> <item name="android:colorPrimary">@color/theme_default_primary</item> <item name="android:colorPrimaryDark">@color/theme_default_primary_dark</item> <item name="android:colorBackground">@color/theme_background</item> <item name="android:colorAccent">@color/theme_default_accent</item> <item name="android:colorControlHighlight">@color/theme_default_accent_light</item> </style> <style name="RedTheme" parent="BaseAppTheme"> <item name="android:colorPrimary">@color/theme_default_primary_red</item> <item name="android:colorPrimaryDark">@color/theme_default_primary_red_dark</item> </style> <style name="BlueTheme" parent="BaseAppTheme"> <item name="android:colorPrimary">@color/theme_default_primary_blue</item> <item name="android:colorPrimaryDark">@color/theme_default_primary_blue_dark</item> </style>

Page 17: Material Design+Develop Android

New theme color attributes

colorPrimary colorPrimaryDark colorAccent colorControlNormal (defaults to textColorSecondary) colorControlActivated (defaults to colorAccent) colorControlHighlight colorButtonNormal

Page 18: Material Design+Develop Android

DevelopmentColors

Page 19: Material Design+Develop Android

Derive dominant colors from bitmaps

setColor() or setTint() on grayscale assets

Palette

Page 20: Material Design+Develop Android

Derive dominant colors from bitmaps

setColor() or setTint() on grayscale assets

Palette

Bitmap bitmap = MaterialTheming.mPhotos.get(imageId);imageView.setImageDrawable(new BitmapDrawable(getResources(), bitmap));Palette palette = Palette.generate(bitmap);PaletteItem item = palette.getDarkVibrantColor();GradientDrawable containerBackground = (GradientDrawable) container.getBackground();containerBackground.setColor(item.getRgb());

Page 21: Material Design+Develop Android

Layout

Page 22: Material Design+Develop Android

Baseline grids

Structural elements align to an 8dp grid

Page 23: Material Design+Develop Android

Keylines

Use Keylines to determine the space between the edge and content

Mobile: 16dp & 72dp

Tablet & desktop: 24dp & 80dp

Page 24: Material Design+Develop Android

Increments

Layouts are created with increments of 56 dp on mobile and 64 dp on tablet/desktop

Page 25: Material Design+Develop Android

Baseline grids

Use a 4dp baseline grid for typography

Page 26: Material Design+Develop Android

An Example

Think in blocks, using standard increments.

Page 27: Material Design+Develop Android

Think in blocks

Spacing is created in blocks.

Page 28: Material Design+Develop Android

Keylines

Follow the keylines. The text should align.

Page 29: Material Design+Develop Android

Baseline grid

Follow the baseline grid. The text should align.

Page 30: Material Design+Develop Android
Page 31: Material Design+Develop Android

Development: Layout

Page 32: Material Design+Develop Android

Standard Android Programming!!!

Page 33: Material Design+Develop Android

Standard Android Programming!!!

Page 34: Material Design+Develop Android

Dimensionality

Page 35: Material Design+Develop Android

The Third Dimension

Paper can be layered in front of and behind other paper.

Paper and Ink

Page 36: Material Design+Develop Android

Z-depth

Paper respects the physical dimensions of devices.

Paper and Ink

Page 37: Material Design+Develop Android

Z-position and Shadows

Each piece of paper resides at a single position along the z-axis.

Z-position and shadow indicate relationships between surfaces.

Paper and Ink

Step Seam

Page 38: Material Design+Develop Android

Z-position and Hierarchy

The z-position of paper cues focus and directs attention ...

Paper and Ink

Page 39: Material Design+Develop Android

Z-position and Hierarchy

… and reflects content hierarchy and the scope of actions.

Paper and Ink

Page 40: Material Design+Develop Android

Built into framework

Page 41: Material Design+Develop Android

DevelopmentIt’s all about the Z

Demo!

Page 42: Material Design+Develop Android

Zzzzzzz

View Hierarchy plane

Z = Elevation + TranslationZ

Page 43: Material Design+Develop Android

Zzzzzzz

Elevation

View Hierarchy plane

Z = Elevation + TranslationZ

Page 44: Material Design+Develop Android

Zzzzzzz

TranslationZ

Elevation

View Hierarchy plane

Z = Elevation + TranslationZ

Page 45: Material Design+Develop Android

Zzzzzzz

TranslationZ

Elevation

View Hierarchy plane

Z

Z = Elevation + TranslationZ

Page 46: Material Design+Develop Android

Elevation

setElevation(float) setTranslationZ(float) setZ(float)

View

Also, APIs to set outline

Page 47: Material Design+Develop Android

Elevation basics: resource files

<View android:layout_width="80dp" android:layout_height="80dp" android:layout_marginRight="40dp" android:background="@drawable/shape" android:elevation="30dp" android:layout_gravity="center"/>

Page 48: Material Design+Develop Android

Elevation basics: resource files

<View android:layout_width="80dp" android:layout_height="80dp" android:layout_marginRight="40dp" android:background="@drawable/shape" android:elevation="30dp" android:layout_gravity="center"/>

Page 49: Material Design+Develop Android

Elevation basics: code

view.setElevation(120);

view.setTranslationZ(120);view.animate().translationZ(120); view.animate().scaleX(1.2f).scaleY(1.2f).translationZ(120);

Page 50: Material Design+Develop Android

Animating elevation state<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="elevate me" android:layout_gravity="center_horizontal" android:stateListAnimator="@anim/elevator"/>

Page 51: Material Design+Develop Android

Animating elevation state<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="elevate me" android:layout_gravity="center_horizontal" android:stateListAnimator="@anim/elevator"/>

<?xml version="1.0"?><selector xmlns:a="http://schemas.android.com/apk/res/android"> <item a:state_pressed="true"> <set> <objectAnimator a:propertyName="scaleX" a:duration="100" a:valueTo="1.2"/> <objectAnimator a:propertyName="scaleY" a:duration="100" a:valueTo="1.2"/> <objectAnimator a:propertyName="translationZ" a:duration="100" a:valueTo="20"/> </set> </item> <item> <set> <objectAnimator a:propertyName="scaleX" a:duration="100" a:valueFrom="1.2" a:valueTo="1"/> <objectAnimator a:propertyName="scaleY" a:duration="100" a:valueFrom="1.2" a:valueTo="1"/> <objectAnimator a:propertyName="translationZ" a:duration="100" a:valueFrom="20" a:valueTo="0"/> </set> </item> </selector>

res/anim/elevator.xml

Page 52: Material Design+Develop Android

Toolbars

Page 53: Material Design+Develop Android
Page 54: Material Design+Develop Android
Page 55: Material Design+Develop Android
Page 56: Material Design+Develop Android
Page 57: Material Design+Develop Android
Page 58: Material Design+Develop Android
Page 59: Material Design+Develop Android
Page 60: Material Design+Develop Android

DevelopmentToolbars

Demo!

Page 61: Material Design+Develop Android

Toolbar as ActionBar<LinearLayout ...> <Toolbar android:layout_width="match_parent" android:layout_height="400dp" android:background="#70ff70" android:id="@+id/toolbar" /> <!-- --></LinearLayout>

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setActionBar(toolbar);

<style name=“AppThemeNoActionBar" parent="android:Theme.Material.Light.DarkActionBar"> <item name="android:windowNoTitle">true</item> </style>

Page 62: Material Design+Develop Android

More customizable

Can set scroll position manually

Sibling view

Allows other views (e.g., navigation drawer) to overlay ActionBar

Toolbars

Page 63: Material Design+Develop Android

Buttons

Page 64: Material Design+Develop Android

Raised Button

Flat Button

Floating Action Button

Page 65: Material Design+Develop Android

Raised Button

Flat Button

Floating Action Button

Page 66: Material Design+Develop Android

Floating action button

Raised button

Flat button

Page 67: Material Design+Develop Android

The FAB

Highlights the most relevant or frequently used action

Tells users what to do next

Strongly characteristic of an app’s function

Page 68: Material Design+Develop Android

FAB Transformations

FAB can: -expand into a set of actions -morph into a piece of paper -react around the screen

Page 69: Material Design+Develop Android

FAB Transformations

FAB can: -expand into a set of actions -morph into a piece of paper -react around the screen

Page 70: Material Design+Develop Android

FAB Expansion

Page 71: Material Design+Develop Android

FAB Expansion

Page 72: Material Design+Develop Android

FAB Reactions

Page 73: Material Design+Develop Android

FAB Reactions

Page 74: Material Design+Develop Android

DevelopmentFloating Action Buttons

Demo!

Page 75: Material Design+Develop Android

FAB: It’s Just Another ViewFrameLayout

content

View

Circular background, on top of other content in container

Page 76: Material Design+Develop Android

FAB: Layout<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent"/> <com.android.example.fabulouslist.RoundView android:id="@+id/fab" android:elevation="4dp" android:layout_width="60dp" android:layout_height="60dp" android:layout_marginBottom="30dp" android:layout_marginRight="30dp" android:layout_gravity="bottom|right" android:background="@drawable/fab"/></FrameLayout>

Page 77: Material Design+Develop Android

FAB: Outlinepublic class RoundView extends View { @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { Outline outline = new Outline(); outline.setOval(0, 0, w, h); setOutline(outline); setClipToOutline(true); }}

Page 78: Material Design+Develop Android

Motion

Page 79: Material Design+Develop Android

Familiarity Solid matter

Page 80: Material Design+Develop Android

Familiarity Solid matter

Page 81: Material Design+Develop Android

Familiarity Force and mass

Page 82: Material Design+Develop Android

Familiarity Force and mass

Page 83: Material Design+Develop Android

Natural motionChoreography

Page 84: Material Design+Develop Android

Natural motionChoreography

Page 85: Material Design+Develop Android

Choreography Arcs

Page 86: Material Design+Develop Android

Choreography Arcs

Page 87: Material Design+Develop Android
Page 88: Material Design+Develop Android
Page 89: Material Design+Develop Android
Page 90: Material Design+Develop Android
Page 91: Material Design+Develop Android

DevelopmentAnimations

Demo!

Page 92: Material Design+Develop Android

Animating a view’s clip shape

Example: KitKat search bar

Caveat: Can be expensive

Better than KitKat, but still not cheap

Older APIs still valid for small shape reveals

Canvas.drawRoundRect() with BitmapShader

Reveal

ViewAnimationUtils.createCircularReveal(View view,

int centerX, int centerY,

float startRadius, float endRadius);

Page 93: Material Design+Develop Android

Animating a view’s clip shape

Example: KitKat search bar

Caveat: Can be expensive

Better than KitKat, but still not cheap

Older APIs still valid for small shape reveals

Canvas.drawRoundRect() with BitmapShader

Reveal

ViewAnimationUtils.createCircularReveal(View view,

int centerX, int centerY,

float startRadius, float endRadius);

Page 94: Material Design+Develop Android

Animation Curves: Timing

@interpolator/fast_out_slow_in @interpolator/linear_out_slow_in @interpolator/fast_out_linear_in

Page 95: Material Design+Develop Android

Animation Curves: Custom Timing

<pathInterpolator android:controlX1="0.4" android:controlY1="0" android:controlX2="1" android:controlY2="1"/>

Page 96: Material Design+Develop Android

!

!

!

!

!

!

!

!

See ApiDemo PathAnimations for examples

Animation Curves: Motion

Path path = new Path(); path.moveTo(10, 10); path.cubicTo(20, 20, 20, 100, 100, 100); ObjectAnimator.ofFloat(view, “x”, “y”, path).start();

Page 97: Material Design+Develop Android

DevelopmentAnimations

Demo!

Page 98: Material Design+Develop Android

Enabling transitions<resources> <style name="Theme.Sample" parent="Theme.Base"> <item name="android:windowContentTransitions">true</item> <item name="android:windowSharedElementEnterTransition"> @transition/grid_detail_transition </item> <item name="android:windowSharedElementExitTransition"> @transition/grid_detail_transition </item> </style> </resources>

Page 99: Material Design+Develop Android

Customizing transitions<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <changeBounds> <targets> <target android:targetId="@id/textview_name" /> <target android:targetId="@id/textview_title" /> </targets> </changeBounds> <moveImage> <targets> <target android:targetId="@id/imageview_header" /> <target android:targetId="@id/imageview_item" /> </targets> </moveImage> </transitionSet>

Page 100: Material Design+Develop Android

Shared element setup

ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(this, new Pair<View, String>( view.findViewById(R.id.imageview_item), DetailActivity.VIEW_NAME_HEADER_IMAGE), new Pair<View, String>( view.findViewById(R.id.textview_name), DetailActivity.VIEW_NAME_HEADER_TITLE) ); startActivity(intent, activityOptions.toBundle());

Page 101: Material Design+Develop Android

For more informationL Developer Preview developer.android.com/preview

Material Design at I/O google.com/events/io/io14videos

Material Witness Demo curious-creature.org/2014/06/26/google-io-2014-slides-and-demo

developer.android.com/preview/samples.htmlPreview Demos

Google+ google.com/+RichardFulcher

google.com/+ChetHaase

Podcast Android Developers Backstage