├── .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 | ![](https://github.com/saulmm/CoordinatorLayoutExample/blob/master/art/hammerheadLMY48Isaulmm08162015053205.gif?raw=true) 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 | 5 | 6 | 11 | 12 | 16 | 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 | --------------------------------------------------------------------------------