├── .gitignore
├── README.md
├── app
├── .gitignore
├── build.gradle
├── demo.apk
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── saulmm
│ │ └── myapplication
│ │ ├── AvatarImageBehavior.java
│ │ └── MainActivity.java
│ └── res
│ ├── drawable-hdpi
│ ├── ic_account.png
│ ├── ic_heart_outline_white_24dp.png
│ ├── ic_menu_add.png
│ ├── ic_menu_delete.png
│ ├── ic_menu_edit_annonce.png
│ └── ic_phone.png
│ ├── drawable-mdpi
│ ├── ic_account.png
│ ├── ic_heart_outline_white_24dp.png
│ └── ic_phone.png
│ ├── drawable-nodpi
│ ├── quila.png
│ ├── quila2.png
│ └── sea.png
│ ├── drawable-xhdpi
│ ├── ic_account.png
│ ├── ic_heart_outline_white_24dp.png
│ └── ic_phone.png
│ ├── drawable-xxhdpi
│ ├── ic_account.png
│ ├── ic_heart_outline_white_24dp.png
│ └── ic_phone.png
│ ├── drawable-xxxhdpi
│ ├── ic_account.png
│ └── ic_phone.png
│ ├── layout
│ └── activity_main.xml
│ ├── menu
│ └── menu_main.xml
│ ├── mipmap-hdpi
│ └── ic_launcher.png
│ ├── mipmap-mdpi
│ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ └── ic_launcher.png
│ └── values
│ ├── attrs.xml
│ └── example_resources.xml
├── art
├── hammerheadLMY48Isaulmm08162015053205.gif
└── snap.mp4
├── build.gradle
├── gradle.properties
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | #Android generated
2 | bin
3 | gen
4 | lint.xml
5 | lint
6 |
7 | #Eclipse
8 | .project
9 | .classpath
10 | .settings
11 | .checkstyle
12 |
13 | #IntelliJ IDEA
14 | .idea
15 | *.iml
16 | *.ipr
17 | *.iws
18 | classes
19 | gen-external-apklibs
20 |
21 | #gradle
22 | .gradle
23 | local.properties
24 | gradlew
25 | gradlew.bat
26 | gradle/
27 | build/
28 |
29 | #vi
30 | *.swp
31 |
32 | #other editors
33 | *.bak
34 |
35 | #Maven
36 | target
37 | release.properties
38 | pom.xml.*
39 |
40 | #Ant
41 | build.xml
42 | ant.properties
43 | local.properties
44 | proguard.cfg
45 | proguard-project.txt
46 |
47 | #Other
48 | .DS_Store
49 | Thumbs.db
50 | tmp
51 | *.tgz
52 | *.lock
53 | *.lck
54 | com_crashlytics_export_strings.xml
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Coordinator Behavior example
2 |
3 | 
4 |
5 | In this example I've tried to replicate the profile animation of `Hangouts 4.0`to show how a `CoordinatorLayout.Behavior` could be used
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 23
5 | buildToolsVersion = "23.0.1"
6 |
7 | defaultConfig {
8 | applicationId "saulmm.myapplication"
9 | minSdkVersion 21
10 | targetSdkVersion 23
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | compile fileTree(dir: 'libs', include: ['*.jar'])
24 | compile 'com.android.support:appcompat-v7:23.2.1'
25 | compile 'com.android.support:design:23.2.1'
26 | compile 'com.android.support:cardview-v7:23.2.1'
27 | compile 'de.hdodenhof:circleimageview:1.3.0'
28 | }
29 |
--------------------------------------------------------------------------------
/app/demo.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/demo.apk
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/saulmm/android-sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
10 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/java/saulmm/myapplication/AvatarImageBehavior.java:
--------------------------------------------------------------------------------
1 | package saulmm.myapplication;
2 |
3 | import android.content.Context;
4 | import android.content.res.TypedArray;
5 | import android.support.design.widget.CoordinatorLayout;
6 | import android.support.v7.widget.Toolbar;
7 | import android.util.AttributeSet;
8 | import android.view.View;
9 |
10 | import de.hdodenhof.circleimageview.CircleImageView;
11 |
12 | @SuppressWarnings("unused")
13 | public class AvatarImageBehavior extends CoordinatorLayout.Behavior {
14 |
15 | private final static float MIN_AVATAR_PERCENTAGE_SIZE = 0.3f;
16 | private final static int EXTRA_FINAL_AVATAR_PADDING = 80;
17 |
18 | private final static String TAG = "behavior";
19 | private Context mContext;
20 |
21 | private float mCustomFinalYPosition;
22 | private float mCustomStartXPosition;
23 | private float mCustomStartToolbarPosition;
24 | private float mCustomStartHeight;
25 | private float mCustomFinalHeight;
26 |
27 | private float mAvatarMaxSize;
28 | private float mFinalLeftAvatarPadding;
29 | private float mStartPosition;
30 | private int mStartXPosition;
31 | private float mStartToolbarPosition;
32 | private int mStartYPosition;
33 | private int mFinalYPosition;
34 | private int mStartHeight;
35 | private int mFinalXPosition;
36 | private float mChangeBehaviorPoint;
37 |
38 | public AvatarImageBehavior(Context context, AttributeSet attrs) {
39 | mContext = context;
40 |
41 | if (attrs != null) {
42 | TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AvatarImageBehavior);
43 | mCustomFinalYPosition = a.getDimension(R.styleable.AvatarImageBehavior_finalYPosition, 0);
44 | mCustomStartXPosition = a.getDimension(R.styleable.AvatarImageBehavior_startXPosition, 0);
45 | mCustomStartToolbarPosition = a.getDimension(R.styleable.AvatarImageBehavior_startToolbarPosition, 0);
46 | mCustomStartHeight = a.getDimension(R.styleable.AvatarImageBehavior_startHeight, 0);
47 | mCustomFinalHeight = a.getDimension(R.styleable.AvatarImageBehavior_finalHeight, 0);
48 |
49 | a.recycle();
50 | }
51 |
52 | init();
53 |
54 | mFinalLeftAvatarPadding = context.getResources().getDimension(
55 | R.dimen.spacing_normal);
56 | }
57 |
58 | private void init() {
59 | bindDimensions();
60 | }
61 |
62 | private void bindDimensions() {
63 | mAvatarMaxSize = mContext.getResources().getDimension(R.dimen.image_width);
64 | }
65 |
66 | @Override
67 | public boolean layoutDependsOn(CoordinatorLayout parent, CircleImageView child, View dependency) {
68 | return dependency instanceof Toolbar;
69 | }
70 |
71 | @Override
72 | public boolean onDependentViewChanged(CoordinatorLayout parent, CircleImageView child, View dependency) {
73 | maybeInitProperties(child, dependency);
74 |
75 | final int maxScrollDistance = (int) (mStartToolbarPosition);
76 | float expandedPercentageFactor = dependency.getY() / maxScrollDistance;
77 |
78 | if (expandedPercentageFactor < mChangeBehaviorPoint) {
79 | float heightFactor = (mChangeBehaviorPoint - expandedPercentageFactor) / mChangeBehaviorPoint;
80 |
81 | float distanceXToSubtract = ((mStartXPosition - mFinalXPosition)
82 | * heightFactor) + (child.getHeight()/2);
83 | float distanceYToSubtract = ((mStartYPosition - mFinalYPosition)
84 | * (1f - expandedPercentageFactor)) + (child.getHeight()/2);
85 |
86 | child.setX(mStartXPosition - distanceXToSubtract);
87 | child.setY(mStartYPosition - distanceYToSubtract);
88 |
89 | float heightToSubtract = ((mStartHeight - mCustomFinalHeight) * heightFactor);
90 |
91 | CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
92 | lp.width = (int) (mStartHeight - heightToSubtract);
93 | lp.height = (int) (mStartHeight - heightToSubtract);
94 | child.setLayoutParams(lp);
95 | } else {
96 | float distanceYToSubtract = ((mStartYPosition - mFinalYPosition)
97 | * (1f - expandedPercentageFactor)) + (mStartHeight/2);
98 |
99 | child.setX(mStartXPosition - child.getWidth()/2);
100 | child.setY(mStartYPosition - distanceYToSubtract);
101 |
102 | CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
103 | lp.width = (int) (mStartHeight);
104 | lp.height = (int) (mStartHeight);
105 | child.setLayoutParams(lp);
106 | }
107 | return true;
108 | }
109 |
110 | private void maybeInitProperties(CircleImageView child, View dependency) {
111 | if (mStartYPosition == 0)
112 | mStartYPosition = (int) (dependency.getY());
113 |
114 | if (mFinalYPosition == 0)
115 | mFinalYPosition = (dependency.getHeight() /2);
116 |
117 | if (mStartHeight == 0)
118 | mStartHeight = child.getHeight();
119 |
120 | if (mStartXPosition == 0)
121 | mStartXPosition = (int) (child.getX() + (child.getWidth() / 2));
122 |
123 | if (mFinalXPosition == 0)
124 | mFinalXPosition = mContext.getResources().getDimensionPixelOffset(R.dimen.abc_action_bar_content_inset_material) + ((int) mCustomFinalHeight / 2);
125 |
126 | if (mStartToolbarPosition == 0)
127 | mStartToolbarPosition = dependency.getY();
128 |
129 | if (mChangeBehaviorPoint == 0) {
130 | mChangeBehaviorPoint = (child.getHeight() - mCustomFinalHeight) / (2f * (mStartYPosition - mFinalYPosition));
131 | }
132 | }
133 |
134 | public int getStatusBarHeight() {
135 | int result = 0;
136 | int resourceId = mContext.getResources().getIdentifier("status_bar_height", "dimen", "android");
137 |
138 | if (resourceId > 0) {
139 | result = mContext.getResources().getDimensionPixelSize(resourceId);
140 | }
141 | return result;
142 | }
143 | }
144 |
--------------------------------------------------------------------------------
/app/src/main/java/saulmm/myapplication/MainActivity.java:
--------------------------------------------------------------------------------
1 | package saulmm.myapplication;
2 |
3 | import android.os.Bundle;
4 | import android.support.design.widget.AppBarLayout;
5 | import android.support.design.widget.CollapsingToolbarLayout;
6 | import android.support.v7.app.AppCompatActivity;
7 | import android.support.v7.widget.Toolbar;
8 | import android.view.Menu;
9 | import android.view.View;
10 | import android.view.animation.AlphaAnimation;
11 | import android.widget.FrameLayout;
12 | import android.widget.ImageView;
13 | import android.widget.LinearLayout;
14 | import android.widget.TextView;
15 |
16 | public class MainActivity extends AppCompatActivity
17 | implements AppBarLayout.OnOffsetChangedListener {
18 |
19 | private static final float PERCENTAGE_TO_SHOW_TITLE_AT_TOOLBAR = 0.9f;
20 | private static final float PERCENTAGE_TO_HIDE_TITLE_DETAILS = 0.3f;
21 | private static final int ALPHA_ANIMATIONS_DURATION = 200;
22 |
23 | private boolean mIsTheTitleVisible = false;
24 | private boolean mIsTheTitleContainerVisible = true;
25 |
26 | private LinearLayout mTitleContainer;
27 | private TextView mTitle;
28 | private AppBarLayout mAppBarLayout;
29 | private Toolbar mToolbar;
30 |
31 |
32 | @Override
33 | protected void onCreate(Bundle savedInstanceState) {
34 | super.onCreate(savedInstanceState);
35 | setContentView(R.layout.activity_main);
36 |
37 | bindActivity();
38 |
39 | mAppBarLayout.addOnOffsetChangedListener(this);
40 |
41 | mToolbar.inflateMenu(R.menu.menu_main);
42 | startAlphaAnimation(mTitle, 0, View.INVISIBLE);
43 | }
44 |
45 | private void bindActivity() {
46 | mToolbar = (Toolbar) findViewById(R.id.main_toolbar);
47 | mTitle = (TextView) findViewById(R.id.main_textview_title);
48 | mTitleContainer = (LinearLayout) findViewById(R.id.main_linearlayout_title);
49 | mAppBarLayout = (AppBarLayout) findViewById(R.id.main_appbar);
50 | }
51 |
52 | @Override
53 | public boolean onCreateOptionsMenu(Menu menu) {
54 | getMenuInflater().inflate(R.menu.menu_main, menu);
55 | return true;
56 | }
57 |
58 | @Override
59 | public void onOffsetChanged(AppBarLayout appBarLayout, int offset) {
60 | int maxScroll = appBarLayout.getTotalScrollRange();
61 | float percentage = (float) Math.abs(offset) / (float) maxScroll;
62 |
63 | handleAlphaOnTitle(percentage);
64 | handleToolbarTitleVisibility(percentage);
65 | }
66 |
67 | private void handleToolbarTitleVisibility(float percentage) {
68 | if (percentage >= PERCENTAGE_TO_SHOW_TITLE_AT_TOOLBAR) {
69 |
70 | if(!mIsTheTitleVisible) {
71 | startAlphaAnimation(mTitle, ALPHA_ANIMATIONS_DURATION, View.VISIBLE);
72 | mIsTheTitleVisible = true;
73 | }
74 |
75 | } else {
76 |
77 | if (mIsTheTitleVisible) {
78 | startAlphaAnimation(mTitle, ALPHA_ANIMATIONS_DURATION, View.INVISIBLE);
79 | mIsTheTitleVisible = false;
80 | }
81 | }
82 | }
83 |
84 | private void handleAlphaOnTitle(float percentage) {
85 | if (percentage >= PERCENTAGE_TO_HIDE_TITLE_DETAILS) {
86 | if(mIsTheTitleContainerVisible) {
87 | startAlphaAnimation(mTitleContainer, ALPHA_ANIMATIONS_DURATION, View.INVISIBLE);
88 | mIsTheTitleContainerVisible = false;
89 | }
90 |
91 | } else {
92 |
93 | if (!mIsTheTitleContainerVisible) {
94 | startAlphaAnimation(mTitleContainer, ALPHA_ANIMATIONS_DURATION, View.VISIBLE);
95 | mIsTheTitleContainerVisible = true;
96 | }
97 | }
98 | }
99 |
100 | public static void startAlphaAnimation (View v, long duration, int visibility) {
101 | AlphaAnimation alphaAnimation = (visibility == View.VISIBLE)
102 | ? new AlphaAnimation(0f, 1f)
103 | : new AlphaAnimation(1f, 0f);
104 |
105 | alphaAnimation.setDuration(duration);
106 | alphaAnimation.setFillAfter(true);
107 | v.startAnimation(alphaAnimation);
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-hdpi/ic_account.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_heart_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-hdpi/ic_heart_outline_white_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_menu_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-hdpi/ic_menu_add.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_menu_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-hdpi/ic_menu_delete.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_menu_edit_annonce.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-hdpi/ic_menu_edit_annonce.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-hdpi/ic_phone.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-mdpi/ic_account.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_heart_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-mdpi/ic_heart_outline_white_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-mdpi/ic_phone.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/quila.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-nodpi/quila.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/quila2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-nodpi/quila2.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/sea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-nodpi/sea.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-xhdpi/ic_account.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_heart_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-xhdpi/ic_heart_outline_white_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-xhdpi/ic_phone.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-xxhdpi/ic_account.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_heart_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-xxhdpi/ic_heart_outline_white_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-xxhdpi/ic_phone.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-xxxhdpi/ic_account.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/drawable-xxxhdpi/ic_phone.png
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
16 |
17 |
23 |
24 |
34 |
35 |
45 |
46 |
53 |
54 |
63 |
64 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
87 |
88 |
95 |
96 |
103 |
104 |
105 |
106 |
107 |
108 |
117 |
118 |
123 |
124 |
128 |
129 |
139 |
140 |
141 |
142 |
143 |
157 |
158 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/example_resources.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | #785447
6 | #5B3F36
7 |
8 |
9 | 120dp
10 | 32dp
11 | 16dp
12 |
13 |
14 |
18 |
19 |
20 | Coordinator example
21 | Quila
22 | I love bones and slippers
23 | Quila!
24 |
25 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vehicula sem a malesuada rhoncus. Pellentesque ut dolor a dui porttitor porta lacinia non libero. Nunc volutpat arcu quis quam convallis molestie. Etiam ac tristique sem, id commodo justo. Phasellus congue tincidunt lectus, at dignissim ligula maximus eu. Quisque interdum nunc eget tellus bibendum suscipit. Phasellus feugiat ultricies posuere. Nullam porta accumsan velit, ut rutrum massa fermentum eu. Nunc ac bibendum nunc. Mauris eu ultricies ipsum. Ut id dolor dui. Pellentesque dictum dui vel tempus maximus. Vivamus non nisi quis libero scelerisque pretium. Ut eu tristique justo. Sed pellentesque placerat quam, ut ultricies turpis feugiat a. Aliquam a volutpat risus.
26 |
27 | Praesent at lectus semper, suscipit elit in, facilisis massa. Phasellus sed vestibulum ante, a euismod sem. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin tincidunt orci augue, a porta odio lacinia eu. Nunc in congue risus. Maecenas commodo nibh ac enim fermentum, eu sagittis massa blandit. Vestibulum elementum massa nec dapibus mollis. Etiam porta, est sit amet aliquet porta, odio elit finibus risus, id rutrum purus mi non ipsum. Nulla viverra nec enim sed venenatis.
28 |
29 | Maecenas mattis, erat et viverra euismod, neque diam porttitor tellus, in fringilla metus est id augue. Nunc at metus cursus, porttitor nisi vitae, congue diam. Curabitur ligula massa, ullamcorper eget scelerisque vel, pharetra ac sapien. Ut auctor luctus ultricies. Nullam semper tortor ac elementum luctus. In et tempus ex. Praesent sodales, dolor id volutpat elementum, ligula enim euismod odio, maximus sodales magna neque nec neque. Curabitur pretium nisl neque, consequat aliquet dui tincidunt ac. Vivamus augue nunc, aliquet eu ex a, ultrices aliquam lorem. Duis nibh lectus, ultricies vel iaculis sit amet, imperdiet id sapien. Duis scelerisque sodales metus eu rutrum. Suspendisse posuere nisi ac magna consequat, eu vestibulum ipsum venenatis. Suspendisse auctor nisi nec leo venenatis tristique.
30 |
31 | Praesent tincidunt lorem sit amet mi consequat cursus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent vitae blandit sapien. Curabitur est sapien, lobortis sit amet facilisis vel, faucibus eu quam. Nam tempus libero at tellus tempor laoreet. Pellentesque quam lorem, tincidunt in molestie eget, dictum vel risus. Nunc gravida convallis mattis.
32 |
33 |
34 |
--------------------------------------------------------------------------------
/art/hammerheadLMY48Isaulmm08162015053205.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/art/hammerheadLMY48Isaulmm08162015053205.gif
--------------------------------------------------------------------------------
/art/snap.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saulmm/CoordinatorBehaviorExample/c6b3d22f53fa0754a3d116795346f558895b74d1/art/snap.mp4
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 |
4 | buildscript {
5 | repositories {
6 | jcenter()
7 | }
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:2.2.0-alpha3'
10 | }
11 | }
12 |
13 | allprojects {
14 | repositories {
15 | jcenter()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------