From 17b7ad2c9ba47793525602d58a728e6e2171053a Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Thu, 5 Mar 2015 00:41:35 +0100 Subject: [PATCH 01/14] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 105453d..36c700a 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,6 @@ v.0.1 beta Usage (Gradle) ============== -``` -repositories { - maven { url 'http://maven.shehabic.com' } -} -``` - ``` dependencies { compile 'com.shehabic.droppy:Droppy:0.1@aar' From dd1ce49403fb36bc746ebfbec6a8b61af6e1ed61 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Thu, 5 Mar 2015 00:43:52 +0100 Subject: [PATCH 02/14] Update README.md --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 36c700a..36b7f6c 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,18 @@ Version ======= v.0.1 beta +Usage (Maven) +============= +``` + + com.shehabic.droppy + Droppy + 0.1 + +``` + Usage (Gradle) ============== - ``` dependencies { compile 'com.shehabic.droppy:Droppy:0.1@aar' From d145b08309f4e079ab7f67f99bf5b9750041d735 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Thu, 5 Mar 2015 00:44:03 +0100 Subject: [PATCH 03/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 36b7f6c..16c969e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ v.0.1 beta Usage (Maven) ============= -``` +```XML com.shehabic.droppy Droppy From d2b48aca4e623b088dc9230824cd48283b939991 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Thu, 5 Mar 2015 00:45:08 +0100 Subject: [PATCH 04/14] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 16c969e..43df290 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,8 @@ Usage (Maven) Usage (Gradle) ============== -``` -dependencies { - compile 'com.shehabic.droppy:Droppy:0.1@aar' -} +```groovy +compile 'com.shehabic.droppy:Droppy:0.1@aar' ``` Generate Programmatically From 30c5577cffcefe40beffa3ad874966726cc537e4 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Fri, 6 Mar 2015 10:52:46 +0100 Subject: [PATCH 05/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 43df290..561d985 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Usage (Maven) ============= ```XML - com.shehabic.droppy + com.shehabic Droppy 0.1 From f359d41451aad91bf94282a794fa664adbe9137c Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Fri, 6 Mar 2015 10:53:06 +0100 Subject: [PATCH 06/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 561d985..43df290 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Usage (Maven) ============= ```XML - com.shehabic + com.shehabic.droppy Droppy 0.1 From 01db565ac3f4f27f937cc845d1840c2c3e8fefb2 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Sun, 8 Mar 2015 19:12:10 +0100 Subject: [PATCH 07/14] Adjusting all views and the generation of ui to have eveything styllable --- library/build.gradle | 6 +- .../com/shehabic/droppy/DroppyMenuItem.java | 21 ++++-- .../droppy/DroppyMenuItemAbstract.java | 2 +- .../{DroppyMenu.java => DroppyMenuPopup.java} | 23 +++--- .../shehabic/droppy/DroppyMenuSeparator.java | 12 +-- .../droppy/views/DroppyMenuContainer.java | 40 ++++++++++ .../shehabic/droppy/views/DroppyMenuItem.java | 68 +++++++++++++++++ .../droppy/views/DroppyMenuItemIcon.java | 54 +++++++++++++ .../droppy/views/DroppyMenuItemTitle.java | 58 ++++++++++++++ .../droppy/views/DroppyMenuPopup.java | 48 ++++++++++++ .../droppy/views/DroppyMenuSeparator.java | 51 +++++++++++++ .../drawable/droppy_separator_background.xml | 5 ++ library/src/main/res/layout/droppy_menu.xml | 11 --- .../src/main/res/layout/droppy_menu_item.xml | 12 --- .../src/main/res/layout/droppy_separator.xml | 3 - library/src/main/res/values/colors.xml | 5 ++ library/src/main/res/values/droppy__attr.xml | 71 ++++++++++++++++++ .../src/main/res/values/droppy__defaults.xml | 49 ++++++++++++ .../values/{styles.xml => droppy__styles.xml} | 36 +++++---- .../shehabic/droppy_samples/MainActivity.java | 11 ++- .../src/main/res/drawable-hdpi/droppy1.png | Bin 0 -> 1201 bytes .../src/main/res/drawable-hdpi/droppy2.png | Bin 0 -> 1163 bytes .../src/main/res/drawable-hdpi/droppy3.png | Bin 0 -> 1254 bytes .../src/main/res/drawable-hdpi/droppy4.png | Bin 0 -> 1132 bytes .../src/main/res/drawable-mdpi/droppy1.png | Bin 0 -> 805 bytes .../src/main/res/drawable-mdpi/droppy2.png | Bin 0 -> 764 bytes .../src/main/res/drawable-mdpi/droppy3.png | Bin 0 -> 809 bytes .../src/main/res/drawable-mdpi/droppy4.png | Bin 0 -> 770 bytes .../src/main/res/drawable-xhdpi/droppy1.png | Bin 0 -> 1618 bytes .../src/main/res/drawable-xhdpi/droppy2.png | Bin 0 -> 1623 bytes .../src/main/res/drawable-xhdpi/droppy3.png | Bin 0 -> 1708 bytes .../src/main/res/drawable-xhdpi/droppy4.png | Bin 0 -> 1554 bytes .../src/main/res/drawable-xxhdpi/droppy1.png | Bin 0 -> 2694 bytes .../src/main/res/drawable-xxhdpi/droppy2.png | Bin 0 -> 2769 bytes .../src/main/res/drawable-xxhdpi/droppy3.png | Bin 0 -> 2854 bytes .../src/main/res/drawable-xxhdpi/droppy4.png | Bin 0 -> 2583 bytes samples/src/main/res/menu/droppy.xml | 6 +- samples/src/main/res/values/colors.xml | 4 + samples/src/main/res/values/styles.xml | 18 ++++- 39 files changed, 530 insertions(+), 84 deletions(-) rename library/src/main/java/com/shehabic/droppy/{DroppyMenu.java => DroppyMenuPopup.java} (93%) create mode 100644 library/src/main/java/com/shehabic/droppy/views/DroppyMenuContainer.java create mode 100644 library/src/main/java/com/shehabic/droppy/views/DroppyMenuItem.java create mode 100644 library/src/main/java/com/shehabic/droppy/views/DroppyMenuItemIcon.java create mode 100644 library/src/main/java/com/shehabic/droppy/views/DroppyMenuItemTitle.java create mode 100644 library/src/main/java/com/shehabic/droppy/views/DroppyMenuPopup.java create mode 100644 library/src/main/java/com/shehabic/droppy/views/DroppyMenuSeparator.java create mode 100644 library/src/main/res/drawable/droppy_separator_background.xml delete mode 100644 library/src/main/res/layout/droppy_menu.xml delete mode 100644 library/src/main/res/layout/droppy_menu_item.xml delete mode 100644 library/src/main/res/layout/droppy_separator.xml create mode 100644 library/src/main/res/values/colors.xml create mode 100644 library/src/main/res/values/droppy__attr.xml create mode 100644 library/src/main/res/values/droppy__defaults.xml rename library/src/main/res/values/{styles.xml => droppy__styles.xml} (65%) create mode 100644 samples/src/main/res/drawable-hdpi/droppy1.png create mode 100644 samples/src/main/res/drawable-hdpi/droppy2.png create mode 100644 samples/src/main/res/drawable-hdpi/droppy3.png create mode 100644 samples/src/main/res/drawable-hdpi/droppy4.png create mode 100644 samples/src/main/res/drawable-mdpi/droppy1.png create mode 100644 samples/src/main/res/drawable-mdpi/droppy2.png create mode 100644 samples/src/main/res/drawable-mdpi/droppy3.png create mode 100644 samples/src/main/res/drawable-mdpi/droppy4.png create mode 100644 samples/src/main/res/drawable-xhdpi/droppy1.png create mode 100644 samples/src/main/res/drawable-xhdpi/droppy2.png create mode 100644 samples/src/main/res/drawable-xhdpi/droppy3.png create mode 100644 samples/src/main/res/drawable-xhdpi/droppy4.png create mode 100644 samples/src/main/res/drawable-xxhdpi/droppy1.png create mode 100644 samples/src/main/res/drawable-xxhdpi/droppy2.png create mode 100644 samples/src/main/res/drawable-xxhdpi/droppy3.png create mode 100644 samples/src/main/res/drawable-xxhdpi/droppy4.png create mode 100644 samples/src/main/res/values/colors.xml diff --git a/library/build.gradle b/library/build.gradle index cb41870..f414620 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -7,8 +7,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 21 - versionCode 1 - versionName "1.0" + versionCode 2 + versionName "0.2" } buildTypes { release { @@ -21,7 +21,7 @@ android { ext { PUBLISH_GROUP_ID = 'com.shehabic.droppy' PUBLISH_ARTIFACT_ID = 'Droppy' - PUBLISH_VERSION = '0.1' + PUBLISH_VERSION = '0.2' } diff --git a/library/src/main/java/com/shehabic/droppy/DroppyMenuItem.java b/library/src/main/java/com/shehabic/droppy/DroppyMenuItem.java index 7c3362a..7eb8129 100644 --- a/library/src/main/java/com/shehabic/droppy/DroppyMenuItem.java +++ b/library/src/main/java/com/shehabic/droppy/DroppyMenuItem.java @@ -6,12 +6,16 @@ import android.widget.ImageView; import android.widget.TextView; +import com.shehabic.droppy.views.DroppyMenuItemIcon; +import com.shehabic.droppy.views.DroppyMenuItemTitle; + /** * Created by shehabic on 2/28/15. */ public class DroppyMenuItem extends DroppyMenuItemAbstract { private Drawable iconDrawable; + protected com.shehabic.droppy.views.DroppyMenuItem renderedView; void initMenuItem(String title, int iconResourceId) { @@ -19,7 +23,6 @@ void initMenuItem(String title, int iconResourceId) if (iconResourceId > 0) { this.icon = iconResourceId; } - this.customViewResourceId = R.layout.droppy_menu_item; } public DroppyMenuItem(String title) @@ -40,16 +43,22 @@ public void setIcon(Drawable iconDrawable) @Override public View render(Context context) { - super.render(context); - - ((TextView) this.renderedView.findViewById(R.id.title)).setText(this.title); + + renderedView = new com.shehabic.droppy.views.DroppyMenuItem(context); if (this.icon != -1) { - ((ImageView) this.renderedView.findViewById(R.id.icon)).setImageResource(this.icon); + DroppyMenuItemIcon droppyMenuItemIcon = new DroppyMenuItemIcon(context); + droppyMenuItemIcon.setImageResource(this.icon); } else if (this.iconDrawable != null) { - ((ImageView) this.renderedView.findViewById(R.id.icon)).setImageDrawable(iconDrawable); + DroppyMenuItemIcon droppyMenuItemIcon = new DroppyMenuItemIcon(context); + droppyMenuItemIcon.setImageDrawable(iconDrawable); + renderedView.addView(droppyMenuItemIcon); } + DroppyMenuItemTitle droppyMenuItemTitle = new DroppyMenuItemTitle(context); + droppyMenuItemTitle.setText(this.title); + renderedView.addView(droppyMenuItemTitle); + return renderedView; } } diff --git a/library/src/main/java/com/shehabic/droppy/DroppyMenuItemAbstract.java b/library/src/main/java/com/shehabic/droppy/DroppyMenuItemAbstract.java index 3dc74f2..5033089 100644 --- a/library/src/main/java/com/shehabic/droppy/DroppyMenuItemAbstract.java +++ b/library/src/main/java/com/shehabic/droppy/DroppyMenuItemAbstract.java @@ -26,7 +26,7 @@ public View render(Context context) { if (this.renderedView == null) { this.renderedView = LayoutInflater.from(context).inflate(this.customViewResourceId, null); } - ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); renderedView.setLayoutParams(lp); return renderedView; diff --git a/library/src/main/java/com/shehabic/droppy/DroppyMenu.java b/library/src/main/java/com/shehabic/droppy/DroppyMenuPopup.java similarity index 93% rename from library/src/main/java/com/shehabic/droppy/DroppyMenu.java rename to library/src/main/java/com/shehabic/droppy/DroppyMenuPopup.java index a9bddc5..af1a988 100644 --- a/library/src/main/java/com/shehabic/droppy/DroppyMenu.java +++ b/library/src/main/java/com/shehabic/droppy/DroppyMenuPopup.java @@ -4,7 +4,6 @@ import android.content.Context; import android.graphics.Point; import android.view.Gravity; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -14,6 +13,8 @@ import android.view.WindowManager; import android.widget.FrameLayout; +import com.shehabic.droppy.views.DroppyMenuContainer; + import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; @@ -21,12 +22,13 @@ /** * Created by shehabic on 2/28/15. */ -public class DroppyMenu { +public class DroppyMenuPopup { protected Context mContext; protected View anchor; protected List menuItems = new ArrayList(); protected View mContentView; - protected View mPopupView; + protected com.shehabic.droppy.views.DroppyMenuPopup mPopupView; + protected DroppyMenuContainer droppyMenuContainer; protected DroppyClickCallbackInterface droppyClickCallbackInterface; protected int popupMenuLayoutResourceId; protected FrameLayout modalWindow; @@ -34,7 +36,7 @@ public class DroppyMenu { protected int mPopupHeight; protected int statusBarHeight = -1; - private DroppyMenu( + private DroppyMenuPopup( Context mContext, View parentMenuItem, List menuItem, @@ -46,9 +48,6 @@ private DroppyMenu( this.anchor = parentMenuItem; this.menuItems = menuItem; this.droppyClickCallbackInterface = droppyClickCallbackInterface; - if (popupMenuLayoutResourceId == -1) { - popupMenuLayoutResourceId = R.layout.droppy_menu; - } this.popupMenuLayoutResourceId = popupMenuLayoutResourceId; if (addTriggerOnAnchorClick) { anchor.setOnClickListener(new View.OnClickListener() { @@ -126,7 +125,9 @@ protected void render(boolean forceRender) { if (mPopupView != null && ((ViewGroup) mPopupView).getChildCount() > 0) { ((ViewGroup) mPopupView).removeAllViews(); } - mPopupView = LayoutInflater.from(mContext).inflate(popupMenuLayoutResourceId, null); + mPopupView = new com.shehabic.droppy.views.DroppyMenuPopup(mContext); + droppyMenuContainer = new DroppyMenuContainer(mContext); + mPopupView.addView(droppyMenuContainer); FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); mPopupView.setLayoutParams(lp); mContentView = mPopupView; @@ -161,7 +162,7 @@ public void onClick(View v) { } }); } - ((ViewGroup) mPopupView.findViewById(R.id.droppyMenu)).addView(menuItemView); + droppyMenuContainer.addView(menuItemView); } protected Point getScreenSize() { @@ -303,8 +304,8 @@ protected Menu newMenuInstance(Context context) { return null; } - public DroppyMenu build() { - return new DroppyMenu(ctx, parentMenuItem, menuItems, callbackInterface, triggerOnAnchorClick, -1); + public DroppyMenuPopup build() { + return new DroppyMenuPopup(ctx, parentMenuItem, menuItems, callbackInterface, triggerOnAnchorClick, -1); } } } diff --git a/library/src/main/java/com/shehabic/droppy/DroppyMenuSeparator.java b/library/src/main/java/com/shehabic/droppy/DroppyMenuSeparator.java index 7f061b7..cc67d74 100644 --- a/library/src/main/java/com/shehabic/droppy/DroppyMenuSeparator.java +++ b/library/src/main/java/com/shehabic/droppy/DroppyMenuSeparator.java @@ -1,7 +1,6 @@ package com.shehabic.droppy; import android.content.Context; -import android.view.LayoutInflater; import android.view.View; /** * Created by shehabic on 2/28/15. @@ -9,15 +8,6 @@ public class DroppyMenuSeparator extends DroppyMenuItemAbstract { public DroppyMenuSeparator() { - initSeparator(R.layout.droppy_separator); - } - - public DroppyMenuSeparator(int customSeparatorResourceId) { - initSeparator(customSeparatorResourceId); - } - - protected void initSeparator(int separatorLayoutResourceId) { - customViewResourceId = separatorLayoutResourceId; type = TYPE_MENU_SEPARATOR; setId(-1); setClickable(false); @@ -26,7 +16,7 @@ protected void initSeparator(int separatorLayoutResourceId) { @Override public View render(Context context) { if (renderedView == null) { - renderedView = LayoutInflater.from(context).inflate(this.customViewResourceId, null); + renderedView = new com.shehabic.droppy.views.DroppyMenuSeparator(context); } return renderedView; diff --git a/library/src/main/java/com/shehabic/droppy/views/DroppyMenuContainer.java b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuContainer.java new file mode 100644 index 0000000..bf71547 --- /dev/null +++ b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuContainer.java @@ -0,0 +1,40 @@ +package com.shehabic.droppy.views; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.shehabic.droppy.R; + +/** + * Created by shehabic on 3/6/15. + */ +public class DroppyMenuContainer extends LinearLayout +{ + public DroppyMenuContainer(Context context) { + this(context, null); + } + + public DroppyMenuContainer(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.droppyMenuStyle); + } + + public DroppyMenuContainer(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + this.setOrientation(VERTICAL); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DroppyMenuPopup, defStyleAttr, 0); + ViewGroup.LayoutParams lp = getLayoutParams(); + int height = a.getLayoutDimension(R.styleable.DroppyMenuContainer_android_layout_height, ViewGroup.LayoutParams.WRAP_CONTENT); + int width = a.getLayoutDimension(R.styleable.DroppyMenuContainer_android_layout_width, ViewGroup.LayoutParams.WRAP_CONTENT); + + if (lp == null) { + lp = new ViewGroup.LayoutParams(width, height); + } else { + lp.width = width; + lp.height = height; + } + setLayoutParams(lp); + } +} diff --git a/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItem.java b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItem.java new file mode 100644 index 0000000..abc59b1 --- /dev/null +++ b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItem.java @@ -0,0 +1,68 @@ +package com.shehabic.droppy.views; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.shehabic.droppy.R; + +/** + * Created by shehabic on 3/7/15. + */ +public class DroppyMenuItem extends LinearLayout { + + public DroppyMenuItem(Context context) { + this(context, null); + } + + public DroppyMenuItem(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.droppyMenuItemStyle); + } + + public DroppyMenuItem(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DroppyMenuItem, defStyleAttr, 0); + + final Drawable defaultDrawable = getResources().getDrawable(R.drawable.default_menu_item_background); + final float defaultMinWidth = getResources().getDimension(R.dimen.default_menu_item_minWidth); + final float defaultMinHeight = getResources().getDimension(R.dimen.default_menu_item_minHeight); + final boolean defaultIsClickable = getResources().getBoolean(R.bool.default_menu_item_clickable); + + float minWidth = a.getDimension(R.styleable.DroppyMenuItem_android_minWidth, defaultMinWidth); + float minHeight = a.getDimension(R.styleable.DroppyMenuItem_android_minHeight, defaultMinHeight); + + ViewGroup.LayoutParams lp = getLayoutParams(); + setMinimumWidth((int) minWidth); + setMinimumHeight((int) minHeight); + int width = a.getLayoutDimension(R.styleable.DroppyMenuItem_android_layout_width, ViewGroup.LayoutParams.MATCH_PARENT); + int height = a.getLayoutDimension(R.styleable.DroppyMenuItem_android_layout_height, ViewGroup.LayoutParams.WRAP_CONTENT); + if (lp == null) { + lp = new ViewGroup.LayoutParams(width, height); + } else { + lp.width = width; + lp.height = height; + } + setClickable(a.getBoolean(R.styleable.DroppyMenuItem_android_clickable, defaultIsClickable)); + setOrientation(LinearLayout.HORIZONTAL); + setGravity(a.getInteger(R.styleable.DroppyMenuItem_android_gravity, Gravity.CENTER_VERTICAL)); + int paddingTop = (int) a.getDimension(R.styleable.DroppyMenuItem_android_paddingTop, (int) getResources().getDimension(R.dimen.default_menu_item_paddingTop)); + int paddingBottom = (int) a.getDimension(R.styleable.DroppyMenuItem_android_paddingBottom, (int) getResources().getDimension(R.dimen.default_menu_item_paddingBottom)); + int paddingLeft = (int) a.getDimension(R.styleable.DroppyMenuItem_android_paddingLeft, (int) getResources().getDimension(R.dimen.default_menu_item_paddingLeft)); + int paddingRight = (int) a.getDimension(R.styleable.DroppyMenuItem_android_paddingRight, (int) getResources().getDimension(R.dimen.default_menu_item_paddingRight)); + setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom); + + Drawable background = a.getDrawable(R.styleable.DroppyMenuItem_android_background); + if (background != null) { + setBackgroundDrawable(background); + } else { + setBackgroundDrawable(defaultDrawable); + } + + this.setLayoutParams(lp); + } +} diff --git a/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItemIcon.java b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItemIcon.java new file mode 100644 index 0000000..f625f6a --- /dev/null +++ b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItemIcon.java @@ -0,0 +1,54 @@ +package com.shehabic.droppy.views; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import com.shehabic.droppy.R; + +/** + * Created by shehabic on 3/7/15. + */ +public class DroppyMenuItemIcon extends ImageView { + + public DroppyMenuItemIcon(Context context) { + this(context, null); + } + + public DroppyMenuItemIcon(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.droppyMenuItemIconStyle); + } + + public DroppyMenuItemIcon(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + final int defaultMaxWidth = (int) getResources().getDimension(R.dimen.default_menu_item_icon_maxWidth); + final int defaultMaxHeight = (int) getResources().getDimension(R.dimen.default_menu_item_icon_maxHeight); + final float defaultWeight = 0; + final int defaultLayoutGravity = Gravity.START | Gravity.CENTER_VERTICAL; + final int defaultMarginLeft = (int) getResources().getDimension(R.dimen.default_menu_item_icon_marginLeft); + final int defaultMarginRight= (int) getResources().getDimension(R.dimen.default_menu_item_icon_marginRight); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DroppyMenuItemIcon, defStyleAttr, 0); + int maxWidth = (int) a.getDimension(R.styleable.DroppyMenuItemIcon_android_maxWidth, defaultMaxWidth); + int maxHeight = (int) a.getDimension(R.styleable.DroppyMenuItemIcon_android_maxHeight, defaultMaxHeight); + int width = a.getLayoutDimension(R.styleable.DroppyMenuItemIcon_android_layout_width, ViewGroup.LayoutParams.WRAP_CONTENT); + int height = a.getLayoutDimension(R.styleable.DroppyMenuItemIcon_android_layout_height, ViewGroup.LayoutParams.WRAP_CONTENT); + + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, height); + lp.rightMargin = a.getDimensionPixelSize(R.styleable.DroppyMenuItemIcon_android_layout_marginRight, defaultMarginRight); + lp.leftMargin = a.getDimensionPixelSize(R.styleable.DroppyMenuItemIcon_android_layout_marginLeft, defaultMarginLeft); + lp.width = width; + lp.height = height; + lp.weight = a.getFloat(R.styleable.DroppyMenuItemIcon_android_layout_weight, defaultWeight); + lp.gravity = a.getInteger(R.styleable.DroppyMenuItemIcon_android_layout_gravity, defaultLayoutGravity); + + setMaxHeight(maxWidth); + setMaxHeight(maxHeight); + setLayoutParams(lp); + } +} diff --git a/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItemTitle.java b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItemTitle.java new file mode 100644 index 0000000..2363fab --- /dev/null +++ b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuItemTitle.java @@ -0,0 +1,58 @@ +package com.shehabic.droppy.views; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.shehabic.droppy.R; + +/** + * Created by shehabic on 3/7/15. + */ +public class DroppyMenuItemTitle extends TextView { + + public DroppyMenuItemTitle(Context context) { + this(context, null); + } + + public DroppyMenuItemTitle(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.droppyMenuItemTitleStyle); + } + + public DroppyMenuItemTitle(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + final int defaultWidth = ViewGroup.LayoutParams.MATCH_PARENT; + final int defaultMinWidth = (int) getResources().getDimension(R.dimen.default_menu_item_title_minWidth); + final int defaultMinHeight = (int) getResources().getDimension(R.dimen.default_menu_item_title_minHeight); + final float defaultWeight = 1; + final int defaultColor = getResources().getColor(R.color.default_menu_item_title_textColor); + final int defaultGravity = Gravity.CENTER_VERTICAL; + final int defaultLayoutGravity = Gravity.END | Gravity.CENTER_VERTICAL; + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DroppyMenuItemTitle, defStyleAttr, 0); + int minWidth = (int) a.getDimension(R.styleable.DroppyMenuItemTitle_android_minWidth, defaultMinWidth); + int minHeight = (int) a.getDimension(R.styleable.DroppyMenuItemTitle_android_minHeight, defaultMinHeight); + int width = a.getLayoutDimension(R.styleable.DroppyMenuItemTitle_android_layout_width, defaultWidth); + int height = a.getLayoutDimension(R.styleable.DroppyMenuItemTitle_android_layout_height, ViewGroup.LayoutParams.WRAP_CONTENT); + int color = a.getColor(R.styleable.DroppyMenuItemTitle_android_textColor, defaultColor); + + setGravity(a.getInt(R.styleable.DroppyMenuItemTitle_android_gravity, defaultGravity)); + + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, height); + lp.width = width; + lp.height = height; + lp.weight = a.getFloat(R.styleable.DroppyMenuItemTitle_android_layout_weight, defaultWeight); + lp.gravity = a.getInteger(R.styleable.DroppyMenuItemTitle_android_layout_gravity, defaultLayoutGravity); + + setLayoutParams(lp); + setMinHeight(minWidth); + setMinHeight(minHeight); + + setTextColor(color); + } +} diff --git a/library/src/main/java/com/shehabic/droppy/views/DroppyMenuPopup.java b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuPopup.java new file mode 100644 index 0000000..b5497a4 --- /dev/null +++ b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuPopup.java @@ -0,0 +1,48 @@ +package com.shehabic.droppy.views; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +import com.shehabic.droppy.R; + +/** + * Created by shehabic on 3/6/15. + */ +public class DroppyMenuPopup extends FrameLayout +{ + public DroppyMenuPopup(Context context) { + this(context, null); + } + + public DroppyMenuPopup(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.droppyPopupStyle); + } + + public DroppyMenuPopup(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + final Drawable defaultDrawable = getResources().getDrawable(R.drawable.default_popup_background); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DroppyMenuPopup, defStyleAttr, 0); + Drawable background = a.getDrawable(R.styleable.DroppyMenuPopup_android_background); + int height = a.getLayoutDimension(R.styleable.DroppyMenuPopup_android_layout_height, ViewGroup.LayoutParams.WRAP_CONTENT); + int width = a.getLayoutDimension(R.styleable.DroppyMenuPopup_android_layout_width, ViewGroup.LayoutParams.WRAP_CONTENT); + ViewGroup.LayoutParams lp = getLayoutParams(); + if (lp == null) { + lp = new ViewGroup.LayoutParams(width, height); + } else { + lp.width = width; + lp.height = height; + } + this.setLayoutParams(lp); + + if (background != null) { + setBackgroundDrawable(background); + } else { + setBackgroundDrawable(defaultDrawable); + } + } +} diff --git a/library/src/main/java/com/shehabic/droppy/views/DroppyMenuSeparator.java b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuSeparator.java new file mode 100644 index 0000000..7199ebf --- /dev/null +++ b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuSeparator.java @@ -0,0 +1,51 @@ +package com.shehabic.droppy.views; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.shehabic.droppy.R; + +/** + * Created by shehabic on 3/8/15. + */ +public class DroppyMenuSeparator extends LinearLayout { + public DroppyMenuSeparator(Context context) { + this(context, null); + } + + public DroppyMenuSeparator(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.droppyMenuSeparatorStyle); + } + + public DroppyMenuSeparator(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DroppyMenuItem, defStyleAttr, 0); + + final Drawable defaultSeparatorBackground = getResources().getDrawable(R.drawable.droppy_separator_background); + final int defaultHeight = getResources().getDimensionPixelSize(R.dimen.default_menu_separator_height); + ViewGroup.LayoutParams lp = getLayoutParams(); + int width = a.getLayoutDimension(R.styleable.DroppyMenuItem_android_layout_width, ViewGroup.LayoutParams.MATCH_PARENT); + int height = a.getLayoutDimension(R.styleable.DroppyMenuItem_android_layout_height, defaultHeight); + if (lp == null) { + lp = new ViewGroup.LayoutParams(width, height); + } else { + lp.width = width; + lp.height = height; + } + setOrientation(LinearLayout.HORIZONTAL); + + Drawable background = a.getDrawable(R.styleable.DroppyMenuSeparator_android_background); + if (background != null) { + setBackgroundDrawable(background); + } else { + setBackgroundDrawable(defaultSeparatorBackground); + } + + this.setLayoutParams(lp); + } +} diff --git a/library/src/main/res/drawable/droppy_separator_background.xml b/library/src/main/res/drawable/droppy_separator_background.xml new file mode 100644 index 0000000..627d143 --- /dev/null +++ b/library/src/main/res/drawable/droppy_separator_background.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/library/src/main/res/layout/droppy_menu.xml b/library/src/main/res/layout/droppy_menu.xml deleted file mode 100644 index e925633..0000000 --- a/library/src/main/res/layout/droppy_menu.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/library/src/main/res/layout/droppy_menu_item.xml b/library/src/main/res/layout/droppy_menu_item.xml deleted file mode 100644 index c8a3558..0000000 --- a/library/src/main/res/layout/droppy_menu_item.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/library/src/main/res/layout/droppy_separator.xml b/library/src/main/res/layout/droppy_separator.xml deleted file mode 100644 index c28079d..0000000 --- a/library/src/main/res/layout/droppy_separator.xml +++ /dev/null @@ -1,3 +0,0 @@ - - \ No newline at end of file diff --git a/library/src/main/res/values/colors.xml b/library/src/main/res/values/colors.xml new file mode 100644 index 0000000..bac6d90 --- /dev/null +++ b/library/src/main/res/values/colors.xml @@ -0,0 +1,5 @@ + + + #FFBBBBBB + #FF333333 + \ No newline at end of file diff --git a/library/src/main/res/values/droppy__attr.xml b/library/src/main/res/values/droppy__attr.xml new file mode 100644 index 0000000..b69ac56 --- /dev/null +++ b/library/src/main/res/values/droppy__attr.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/res/values/droppy__defaults.xml b/library/src/main/res/values/droppy__defaults.xml new file mode 100644 index 0000000..171dde3 --- /dev/null +++ b/library/src/main/res/values/droppy__defaults.xml @@ -0,0 +1,49 @@ + + + + + @drawable/bt_bg_popupmenu + + + + + 0.5dp + 3dp + 3dp + @drawable/droppy_separator_background + + + + + 150dp + 48dp + true + 2dp + 2dp + 5dp + 5dp + @drawable/droppy_list_item_selector + + + 32dp + 32dp + 5dp + 5dp + + + + + + + + @color/droppy_title_color + 128dp + 30dp + 0dp + + + + + + + \ No newline at end of file diff --git a/library/src/main/res/values/styles.xml b/library/src/main/res/values/droppy__styles.xml similarity index 65% rename from library/src/main/res/values/styles.xml rename to library/src/main/res/values/droppy__styles.xml index 536e385..f772f66 100644 --- a/library/src/main/res/values/styles.xml +++ b/library/src/main/res/values/droppy__styles.xml @@ -1,35 +1,37 @@ + + - - - - - - - - - diff --git a/samples/src/main/java/com/shehabic/droppy_samples/MainActivity.java b/samples/src/main/java/com/shehabic/droppy_samples/MainActivity.java index ed99333..301e2c0 100644 --- a/samples/src/main/java/com/shehabic/droppy_samples/MainActivity.java +++ b/samples/src/main/java/com/shehabic/droppy_samples/MainActivity.java @@ -1,6 +1,5 @@ package com.shehabic.droppy_samples; -import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; @@ -11,13 +10,13 @@ import android.widget.SeekBar; import com.shehabic.droppy.DroppyClickCallbackInterface; -import com.shehabic.droppy.DroppyMenu; +import com.shehabic.droppy.DroppyMenuPopup; import com.shehabic.droppy.DroppyMenuCustomView; import com.shehabic.droppy.DroppyMenuItem; public class MainActivity extends ActionBarActivity { - DroppyMenu droppyMenu; + DroppyMenuPopup droppyMenu; Button btn; Button btn2; Button btn3; @@ -78,7 +77,7 @@ public void onClick(View v) { private void initDroppyMenu(Button btn) { - DroppyMenu.Builder droppyBuilder = new DroppyMenu.Builder(this, btn); + DroppyMenuPopup.Builder droppyBuilder = new DroppyMenuPopup.Builder(this, btn); droppyBuilder.addMenuItem(new DroppyMenuItem("test1")) .addMenuItem(new DroppyMenuItem("test2")) .addSeparator() @@ -99,8 +98,8 @@ public void call(View v, int id) { private void initDroppyMenuFromXml(Button btn) { - DroppyMenu.Builder droppyBuilder = new DroppyMenu.Builder(this, btn); - DroppyMenu droppyMenu = droppyBuilder.fromMenu(R.menu.droppy) + DroppyMenuPopup.Builder droppyBuilder = new DroppyMenuPopup.Builder(this, btn); + DroppyMenuPopup droppyMenu = droppyBuilder.fromMenu(R.menu.droppy) .triggerOnAnchorClick(false) .setOnClick(new DroppyClickCallbackInterface() { @Override diff --git a/samples/src/main/res/drawable-hdpi/droppy1.png b/samples/src/main/res/drawable-hdpi/droppy1.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c81076f6b5557188c664a8f3fbb48f2827070e GIT binary patch literal 1201 zcmV;i1Wx;jP)tW}78edx6-X-@Xc{=S{}-n@CU zLU?E#2W5&>l_F>o!X}~ICJk+auxAkVNJE=YZWF>LMbM;3RXGmIKAt_T=ruxU5lUmU z<~ho z8{wQ+@f}<~PY7E@3Acc3b#VE-C-EvIly_$(e!xfWc2I>=iBBqUiBM8uA~k$$Q2vnt zK}iKJJ(A*$mP{3RnQOt53Ca!9a@QL~&uoenkCFz%XYxkyJR!7P|IKYqU572+<_Y1` z^s~8EJ7qL{L|Q(u`@|T>?uE+2qYY{Jg|$9w)xcaLR1G@>Y-NU6LZ}yLGDn2)SAuY3 z+=j)>C4+F&v2u0$pw)2R+a`tb3yy>GP`?&dKgzqc>JJuIK5i~v8 z_vd+qW;KeI&JoIcBlAbl9Hxzfvd`Sc7l05#5UO>{3hxgkfE1}UzxM7AfG>xq4Z`oE ztDx2fDDCn0Q2-D^2#Vx8mS?oOgmF-Qn0!7PK)&x2fDxZI2>+y>VK@%Tf+AJ*DqhQ< zxU%?+PXHl=FdDwHm{HXleMrN3*eO;oalQVyZ}CFdotYwN3PRXS|Ikb1 ze$E0&P+coRsH-JCTNs4B)Uwl>zw8kJgK#@NkmI0iH2ml>%>GFz zU!N4fAlx1SNShF8xy#HY2gLW@LN3Y!S4wSb%v?&J+DJp&;>2+1N_TskUS@QfXeIRG zE4cxjPHYRK2+BE8hGS3KlZt}80PZkq+sGnyHS=wZ39&^0xHmFeDuM9jxCwo%#3TUD zRKl9fp*-Lfcxo)flq-=JATya0!k$hOs<-n@-ihUfq5&vUS1tD68vKLpK=T`~tUNJp z@}#1mNPymf=9a~L`Ue`bGDM>$e~^ccUgrHzRAk*yEPp7 zgBO7A^A0-^ywxkKSbWn_RuRHo*h&y?*wTysxZp*D^1vH}mb--TnFG*m)~?bbY59Oq zy_W@%ASlxCt1k$L`0Uc65bok`w^j)sWSUbWoJ%UfB5C-lJw|< zF!6Ho8NEdea{MEV3h05 zoXcn{#*$*#B8GipXc5C{Fk8g1uNbxzW65Q-%XMeY#NN3;6I)A)afdWqC=Gs=Ng6H` z;|{U4bgg8lX%!S>NohFC3VOgiQ;a2QT7|Iz-}6_eNn=ql9vcMSKN*inV{y-4oi+-- z!q#2Iu$x{z@JeYsQ5p|}dD8hUEfLtQuyxl6c%|h7#rSr}$(@tNO=7v?vb8`>tKj?o zR9A-Y`%~1k3NBj<#Bzl+ZYsv}Au``8Eg$3pPo8|F7~dtHG~*lBlgrh{;%rvg)yCqi z>&azed^3Q=JM!cs!2hPk$!h1&Tz?mV9MPfWMMj}v~c<>sw*BkbHUf|)e z-mvFM!*&vh)aukR*r?7ELz^_LZ8VFwvj9^bJ}%ecYpPqH4D&7<&Ejp+utp5+IGY%1 z*n9r!bey*#hPGn)Gz;+e1R{oszmNy_dyPD@hUL?E60ke)5J+P&L2cGX0UsgIdz*}} z%603DWGt|j;G&E13px=t5~N7Oc2>0+MxbY2x>{D$>nC@@>jHI(+63cqY{U-IgNV1u zYp`hpSDY(eZ`kv(-ifi)_s4SGnNu;jP2zQ#CeTr<-+nxBJ`Ar4qVcZG-!S&>FUhr87C=Hi!{@(TEa*P`72qA*JKAg`p zo{y3q7$D#i<6hXsRvU}6;oONdT$Jn1oNyWK7~S7A0e& zA`k$39wESTCDt1$hOMXoYvCpdC=LIFV~@+$LX-e(31Zj}sn3+-AcJ_FNf zAx0}`jGuf5)KB4kQWZ2=OUiM8C&pJV*#0QISE`ayh-^iD_3!UL$kMG&VYn}!{q^m~ z;eApU^+IHCtEksc?vMxTO2cIi@Ru&*4{;}-xvetbx&}73$bUU;t zYzdLCwOD5STrvI}&8_<6v`FK|*jkH1VECb_-d9TWY)k%mM-kHup-${kLf-x-^FNv{2jCjAT2*wM+_?0-gEjjvj@V7rdugBWQA}w8v3kH+IJ5qtp z)EL{O@Km_Lk0&ao;74Bx#xJDsM`qG?F)?v)n@Z?v81Z6Bx01pHF;F++m2FKj#zwXN ztghty-LOxnU^Xogp|B$qLQ=spsbE{wNO6byBx0L75TDMRMU3rfBNnt`LObHIws|&&J!VQbZA}_u02cd$$?Zoj)GRE?} z(UEoTJa2SJ#+YEdsv_c@Q24$PSZN}e&3 zpNqSXOFW7ET-;5J8LNo2$Eh%nUgMc(>9H-HDnPyI9h# zg7M5mUMk#d6!9da!cC(HhF2`x6$Tb;ysTd`d(#*Gt~eYnCs z;f6N~^XSb=t}u^Y;f6Pa!o6y-WZ%Um1-u>bwmSdq#27OLDU+Wcm|yQ9#$qxO=R6Fh zC7<&!R1t|8iv#oPJ;}bKOS;`0?C{e;C&5r@FN;ukY>5wxRXxN$iY48eG{Au&6ds$# zm<&t`PxmakcYL;!7PW0DDXiK;f8LER)Dn<);|o<%hgIVk-smvw*!F<8)#(T~x@xe* zl#M{O#4hK>7i$T~dGSTtc)`IN>$(b475&}ls>SbFhQ?}mNESW1l9lwN$f7Wp!y7hfh7Y$nJo^}Au8ZOmROULkne z5sa6KS0v&6x5!FVV+yp{8#b7{$!k@KT-lEYhq@sK#UPP3b5tFBo>SF$J) zj28|uRuTfj!^Oy_02#EGq0K5eo#&|ZmpSU~*05YXI5=qQ)?G+@2N zS>5Pq!RkhdaVJe68<=135gdGT63vv<*#lY1R6_c3ffPR4^O$-ye3X7%NUm>9C9))Q z#(KHVO)#ES9-k`7+&-~X=`^_*B*y!O31GY@7lReMUoD-sb+8pQf^olr*1w-zFI7R4 zrKBA3qcge^wdsqcf!NKrlWW z1 zwVIg}R*CUQayVQq-#YTsqT?L@akp5~t>ojp^l(ME(KX>l*QAFlvx-f07?MhRxZN2 Qh5!Hn07*qoM6N<$f=8ZYLjV8( literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-hdpi/droppy4.png b/samples/src/main/res/drawable-hdpi/droppy4.png new file mode 100644 index 0000000000000000000000000000000000000000..dbaeef3048c113f8a2392ff2037858e6b2429ed5 GIT binary patch literal 1132 zcmV-y1e5!TP)|&wVX$9PKXGoBkSZy&(Ed2vp+Okubkn_Dk zox<#z5JPsu5*y>hWGNu5tB3`O;cdapA_L5O@6Kab_9VBO%sJn8?mg$;``s4=IoQky z`W)-1Fv`NH2Oxp+jJl963Zo*7vSS^c89`qju{#8fabcaej4ewVXBvzxVV!r3 z@vf4&AJ)$AW?I)XgFa#i>$)(?_ru!xV*_3aYrW1ylfqcd3;01ISal|vEQPh+T)|J9 zh0B&TIxgS`mzPGK}iP5kl@OCJ=Wl2AG9sJ(-Y=@#--3GsH zS)W*gX-l|a2{)|4v}Ju_Nw>Q~LX3t!;DvN)imTU-@;k-VYeKr@Ln8HZ+AUa*HP3kN z%!_kL{+)So&N80+)I?%om%>`FPqz`mT46ZqPnDq{2nxedzYx~4lhCMbi*+WN^eHwW zJV*<^X+n756U&)s@=%A39oA=)+Lr6jE@dWg{n;g-q87&Lp*yxP%03yfgx6WYH_Z}W zd(AkbywB0h2>N`_HbT1SOF&2${Rrs#z5}3RjQeF@W6S!+dj?qF_{MdN@x4s2&UZlI zOVK>Nk`;W>JiTIBzxc)#*7+a^c9)OWdH!o>1`o3m5QB%E#I%g9nGy5_j&-ynN2IYO zd?+#oQfHqrUGQ;OfFxOy=O{1jI&3hVDV#ViNHsN~_SF|BWfaC2@f z?r8-+Hx~B@;ihH0%`2WTD&DQEtz*Kn5FR;(IEDz}kr0;ikE4r$5bAk5?$!`OJ@7hI z{YQon*8Ud+>L(4P0|NEjidabh6w;ra(I16zyD%J4kugwY3>1bV62|SuZj4G9mmTCi?!cexKFm#^RoW ziGHw*Up)wvGaV&_^}S<^=K;LcN@1;62osj^cUnA-bu{&1P6!)C(!soew_1^O&=USi zB+xv}1woqQGh!n)b9TAT{JhL&}+4fw-ll^{qK zwuG>8oFv3(D1?o+YyT)=D+p3bi>#a0;BMaFt-;-PnQz2yFD(W^T5%UUj`28)9(t4& zhNFJRc%0NWQ;EAxODnH8cIMf8L%5I?_`M-qaEw`DeV@2#Ws%pLmgRv%7@vf7P6!j$ z;A$zXoo)433TtPr!Brtl2*h%3fY6N{t{LeiZxlTBdZoN=@3CRU@^h>e1cy{uX(g0O5SEdB)|J}M<5 ztdPP+#KO)Z5PYo`3*nv}wlLRX^O(oYW@ci@gT*h|`LT*hnHZ@~g z2-h@0R}*xFa7{C|HDgoAtr_1fr2X!`E8zJ_?Lk8`b~J%WwHZ6wgGRvflerC>N@Y~o zscXWG)P@rqH-w$KsZ>U@ow_yt_Ib)sZ_>w8D@oHJ-;#dB!qW0!|&Mh zbzO$p6erJbToV`}e5RCAQeK!4##eEOJ(U>v{9v*R!(U;zu=7pdAL%hZjJv}c6N7-u zdurGe#;=;;s_k$|2&W#Ep64gCMthH(TV}a9W|oU%#xI>T#vI$rwZ`{Hgz#lJJ0dBn zJ!s^J>>EP^Dz15yEeW1<+&XQmAOHDLrVZMiZF8b4e+s`sL!eFvR}^2t1cUhwEAalv1kC z&U9Rf6uT>o7c&7wT;PEpe!0JhGq#x6Cp}k&0VG`z3c^H*%mcyL9tMyI!f+Z2;cMHU zY=M~{AeM&VLL`JeT`i4UA=sG~f}aNguoj|ZDaPA-eIQaZ@&MRMu~PA7gul!(p0NYK zyZwU@eh6br7#<5d*Uh!kaixYdBc+n5Ld!f@RYD~QwTq2S7XRXrj&gs6@nMG z%n-&_cH={a((Pp(%NaYuPF=j>*}MR$#`35V$q88q17Tbd5ASJ)_gQ35eKFZyM|w4j jsBu)6(}W_2bUptE>Q=ykqN@(000000NkvXXu0mjfE2?bR literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-mdpi/droppy2.png b/samples/src/main/res/drawable-mdpi/droppy2.png new file mode 100644 index 0000000000000000000000000000000000000000..8be2f564f04b789991d0375bff4edd1e565f2d06 GIT binary patch literal 764 zcmVDG$<`SNh)_Udq^(s71AUpLTS0NWC}e?y0!RE%9>>=VO?435d*m>5RH z*jJ2Q9eT18`Wt2K7Rm{G+sc3@hQG={ROWlq)hFz2FARJ-4A!;9reeG=3q0{L-fN4^ z(_ye)37jnK5Tlv&3?GQ0r!6+ML0^ZmrbAiN27PU@Nen$=e3)|1kcFL6;M&MNGH{zS zaHm){&IYhmbpC7rTZ(0a81FJR4BToX_liBwfh&d!W$T;eV)rb{);ATyMV`dWNSqFX zbvNw9@JLp+qo}nq4@evQN=6=be;mB)N3B)&Ulg@g$jUY`Ji6(aS`*r0GsD)(b}3J@ z(YjGAKc8RwYpxDi*>?4`#b(CH347a_YG=48@_Z_RG}L(62@iJNNMzE%c%NxeWk6>N zu0qb|wBT=-gtGO`Tw!VcUW~oe?#cdlWw1vX|=Kh z;#$HW(LEc$mOCeO=t-d%yAG>f74T974E}VxgBW^Fn!17*`!lQaKM;r=^WG==ZnqI* zUl7A6C1B8h4Fa0+OG?0???ikg$l&-nC$jb`5isyAB@oJ*lb-R52q+_4FDI~I3d({% zh59HZFp+`=)el_o!s}Rw;)Ue= z+F#Q~ej>)m|rQ1K1kv(K>ST2|B`5~ zB$_Kpdk^GiwTLez@n^ZmulpumAU7(>ev-t0 zQWFOYkgtKbv_Nk3N#yUfeFJEIwi`4zKukbflG^5#j^>n(=A^cHAT9wh0h*f*5&51v z8tQBP9gz7QoFr1nMOCX$B>rEkPblOfAV)D9WG*t5%eToV56OvlbJb`(UF;r_t48BM zyc;@^+vmxSKP-?N1>zrG*zOf_dEL38r;<0Z?%a?`yUR@nnLCKN><{5lUyO%k64HC^rDKsDHV7IUChpYZ!c2BReb#M@r(DKrXXE`nyX z*UbSyvlo_KyFDh4Z(B4jmM-dSI8g9Y0NO5gbwJz2SPIA#Iyg}B_-gSGYn$(A_yt7R z`mSw0mZFC%wIM(q%_R{$7fMHSUYf4{0|!#1;3d(Pf+P{XG}=Vis|_#F&6%hK6oNlM zD~o_)5u1R89}sw3xLIP7_ueGyk_%JbbMD-axo3p%w5^~v$;xFlq0EFTOVl-?sR>P% zs57Ce31wC;yA{+XeQ^_QQ=QLgg%V3Nw6vkmVTp!TC~d0qxuJ;*nfnQruBger_!9RV zvM(%Mv5>i+7>GQ-ayhTbUJp&&8_0Ej<#OJOTq`Uv;lTs=gUQ}8**h)mM`BqB4_aX% z@#cx-WLsLHlv}ROw*7L;)mg1j(qvmnK}2Svkh!1mNxMbZoKLs2avQNV6hg3a8$Q$VWkj_?$)}t1smf|n0Qpp9 z)oU^oNu5YH^J);SGf7>=>T8k2n<3=37k67@lxI-!67!ttmnI1R$_+|tFOA@@s5`{>n#v13ShW9f=JX*ZQL|J}Bec2h>#ADZwMgI|t& zh&~Lt%%H^GX2@l9gkE6fvXM_QlRf@d^0qPA<39Co{1vbLmJyRX{JsF(VNV9y%Secb zbxgM9vwV`wC>!)BrS5esM1MiT(!MfbeOPiPth2PQy|`V1M2HwkMz&?h?iVsQ)4s%o z%+0hRyWdwMMoBUu;zcPF9*nfxoOUyjH%_}5Bkgt^Mxs1Vl;wmsCR}|smfO?P?J>DS zCS1kMyq7HR%*4n(CT$z(*R0b<_Brjg|Mflp4XwQKLqH=e<^TWy07*qoM6N<$g10+o A&;S4c literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xhdpi/droppy1.png b/samples/src/main/res/drawable-xhdpi/droppy1.png new file mode 100644 index 0000000000000000000000000000000000000000..19483f86ce42d904794bf5fecaea5646e283a212 GIT binary patch literal 1618 zcmV-Y2CeytP)1 zPiP%Q7@sCqT2rCqAktonmg>QqFyC%c<<a6hSmnp)J*efScuW96$addVIK(?Cjs}W2J0Z<9tjvX zVc6GQ@MB|JBMDO^_;NMi;3^^fm}Pttd^wUZWyZ#~b`3ls%v8Cu8sV%7!@dT37zwzT zNgEJma+6@furHD@)dQ;i-s+r!puZJw+)4dk2~)Yup=t9~seKy(iXT}!w}#lij}U%J zGY1kdz9H}}Z(qH`L;kx7YCDqV*o;2Cj|usbLwoLZygM}ad040#JRxt8@(!lWH9iVz++%;7?&h_M;oRI#!0asmPI}cDKV7%~EM)-B3 z0JBJ=?(Zc5iw-SI-W7~e17#d(iza|E#$xo3+qQ2)KA)IRh>(w#V&^3gV8XDEkk4A@ zk>p$n`S<@90vKZ~uEPO`7R)~U@rbvlh%{D}1Q=tsL;@~Z{6PFrj!{dPCk*U?wYzk$RY`4*dg zs%(I1a$ot++I9miyh+wvokUyx!yKvYB!sX2%LJIP_K4LF2$;4zK!nSTt)|4Xk8~_*7Ixfo`G{V_D1f*?)mOuz@ zWXaDp&4GW~s|2J5Lbgzt1Yd593_p`;kb*TK4*{v6u%5H4FZJ6>0KX*C1nOB)GCt0o{;{H4rk zamL&iBZT~$PAe_CNdO5rA4yP=1l3R=wep8tb;PZU5&Jzy(#44DYK#P5*1|j52?2y& z*ewDqApRzVnWP%xSi)P5#Z0~$W6XUyO2}_@awyRVuNF$c>b&4~tcG4(8MjqBbK9X! z_L7v6bb0)KlJ0?aGJkC#~+1%2*=9SbC8ZAz#wSPiE?j zF{YJ2L;}v2bpy2?dk%cg!bwIZAP+1x`!Y}SX9Yh}|uolTNW`FPqUz5aauUrmGf$&EQT Qp8x;=07*qoM6N<$f_&EM5&!@I literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xhdpi/droppy2.png b/samples/src/main/res/drawable-xhdpi/droppy2.png new file mode 100644 index 0000000000000000000000000000000000000000..9b99e64b84b19670fcde4b920acef8cb169674be GIT binary patch literal 1623 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 Ef@LoMumAu6 literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xxhdpi/droppy1.png b/samples/src/main/res/drawable-xxhdpi/droppy1.png new file mode 100644 index 0000000000000000000000000000000000000000..8f43193adc8140099cef0475fa6f8cd08dd33045 GIT binary patch literal 2694 zcmV;13VHR3P)m^go1*aR6@v>tPmWeAez=dQ=vKcuJhyJVb>;!e|GNA z?!9aKNb_QO@63GPoqOizoNt6EsM%q^cR`o>LXATvkX0raGX$rM!YL*=XB5mBg7b#p zyiqXI_!~|cf>TT|W&&9aH4ZK4QlB06d-Lv3;mr>Fy`lC>CXiKDIL-ufOnBWWuxSbt zUT1hD0g9(r4Ii>8_NKmlIgvagR;2nA6E`$)GuJ%8` zgs&bOU8s3+vb>?Q_T%A+hM{B zw&Hzoz5cSseMaG55otc3v{ z+c1kPf@!PNM_l`EYqjl6@PjyhffX!<0UpZ+d@a#znC%7pZ&b!ZaWSx!$_^%3i#Zam zq~1HS6@S-8*;r$OItTJwiLppB5(v(u+C?>itmX||YTz4tH>VAG<-|ZNkx;4ZV1>`d z8VP}{CaSDHP}55at*LmehOkvEVl zfYtELdfD6Cs)YLBeeH~PumcC~VuC+Ax0~=ptO_Cxhl_ZO$XX7x3DekSg3^Ob_)pgn z>3qg)YkrR*n9LjOq7xv55Mcn1Ir{^GNvE{|YdKid=!K#YU~9GQM&U`PwiDc7EeF?s zptajr!9?CbcMAbR2vIM4dtE0htYBi@;IFXkK@o$dicEkILNLjiBLP>#vIlEEC?p)o z8{}>zz&z}K%+(=>gd?jy#8xUh4Z(EYAa^4HLI}YMf9TW?g6UPK$Pr1u=o@ZDCLlT@ zKWPa5-Lek~79*1WiU$~yqj>||x_C!A53ReI0Ds{&3gqZ5KeWSsuOXbxAK>-h9M-rm zCv2UJgZ_t{CNYGwwDuU`#a9|6BfJJ$ktGiCZcm`6v_c76B`bgZ_^*foc6& zhf~5RoN5W0!oRP!2ntC)8h0dY1_Er&?_mXhYmEm^iKg&Hs}XQ+t;*v1gv~&J5JE7) zStneLf|=Gs1%JO@WpRAMW+A{Re8T~c8PSw`X~op5ttxc&37drgr$};w^O+GKMEWUe zyGm0bGkowuWz;K!*Nm0;VVTM3A@9qoJ|qwtlq4J(vSXeR-24rH8+rP0N$Hr!%ZNEyPbeWczSEWr!~XV<0NRfs*SkXMj(I*pL2Wr*GSM1 z!aYTa2`<@z19xTB_--eF%LndZg124jT{A^Vhp!B_$=eeSR*y5WSJ20Mf;fWx(Q@8 z%}5CK!TXA;R}`DDw4!|tK;p?(vchYI@Ox=Sg4Oy%p_0#ZG5l9F^Ku#tL7_8(ha1Fk9(jA(D%C zGvQkcNAR;*w4oaaXp4CFk|mX|XNCU=mHbK?zaT{M323W){gNfUz@fQq@tZU^(-oP3 zj$UOF5$;cXg$cntldL5P_AM#_9lgS2$s)r2X|6J1g14FQxk$sOT z{YIV@{>%_Q6$ResnecS(z!&W*!zJ6g%(Ec2b)9ViZ0kbjg4ouT<^{1x!(l@(S@0vr z2Ji$o48depxe$dhTl0HZ%RyE!QN#!cR&bRSOt6-Ng?6%O&04!HEPD_Vju?XJJOyJL z8WJ!a5{`sr532OH6%wPl77+Ecspix*zXOsS2BUD zvchpDn2URd`}vKnfyv?4iT%T}5l_Inp}sV~$xWCB@bg0V)}3Qjcz zMrI7b`KH{?Oyh4jWe83&!B_)q99qz&z9IwuKd})*$Ft-+jQ{`u07*qoM6N<$g3E;! A4*&oF literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xxhdpi/droppy2.png b/samples/src/main/res/drawable-xxhdpi/droppy2.png new file mode 100644 index 0000000000000000000000000000000000000000..dac7019a9d420d289a8db995fb4fe5ade90a9d29 GIT binary patch literal 2769 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 literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xxhdpi/droppy4.png b/samples/src/main/res/drawable-xxhdpi/droppy4.png new file mode 100644 index 0000000000000000000000000000000000000000..996cf28adf5b9fa7550b993e4e2d3d57017b7e9f GIT binary patch literal 2583 zcmV+y3h4ETP)o>x-DLA{*D^${_k^2c{fPiZnc~ql}Y2;(6$(TkS zCEyyN3~1#3P)VQmO&0}bRUFjYUHemd#6i71su&2B^l6YmLO!99CpB=A$&e=r`Gf`; z43+dn6$A4DX&~+%Uqp%nLf)-GCN#)YX2E~fWJ-ff5b|zP9K_w@i(Knq6-kn`kuMz@ z%}xS2YDe_u!61;M8qH4fr6Wm_HrM(ThB&A%jFjor$on}K8l zh=TgEP)Q#lpK&f^)?WnjnNUez6x5fw*0m+{DD${R8F4LK0l$cm9%UYPt#4DrL4BcC zvQ?v;buLzMK{%_GY%Sd;9d{mCLcn|7zEavUnIho5ap#dGu66f3&+~fJ@IxBexEIFu zuYpaE8h*&B_~chnqnvauhO;2ZN%E`cOngE<I>8Nd^=7M@;Ld@kr#jRrGt>it?>umo9oA#R5Q>_ZU&We<`TnU69__;H98`w+8v%ntv$gTRvk>H!2>sy82N@3fBA@I5@Q%Zs`Rh zQl`^-LJQ?13z}a6jq;IA9|`zUq)g|Gq>?0QOY3&5t_-Ui@HA|0#FrNu@1L>wi+t&D zQ8Y!!?^)D7^%eO&>j40{IAe-MquFVn6ek+wfJN<7Uu}MnUGXb0JFiP9?jB#1)@s@( zMaW;-tjkQ2q>Yfja^fq<(d!ljlj6WtRRaP4L;*i&D*zPmg9QAOlV1SH6e$j_C561( z4WZORWwzJ~K&Z?Xm%bA6?kfnzLA^b#&v!>kgM4D6;Hi<2`^2%Y6IV2eL=^+Bi>e6t zQi%L?(E$jNpLSoREmKj&z-3Yvvz{{=$`{+#%JQPb-?mnkYm_gX`w3TNNj1ozYeLgT zAiIhR0DW>aqBquE5jKe+bm%7w<06qr@kbK|qH3mRol6x8pXtME}!zgMH|(ZCl<;Lo+@ zo38R~z|B|6u@KF(+t-+-tqQ+=jaeF^c~&DIbIyMT3zhVF8oA#!kyeb5$4SX+q&VnZ zcj&IGMekjA=q^$mkdoJI)&ON(T>T!Q3^*q;Ym?Iie3($Ggi z20m8;{>=k`GEl-)gq&`O{f9`I&Ysn^2j)^Skt9i5&+6I(kusg3;y-GTK?3=Yd;k8= zko!xKj3bbL6Ud)K-~6`ciQyHq6}wgRJTbh2RCRshmvr2<-)S<=Svp!K2xM0T)io{# zUu<7vmPSf`L&&=cHz_-|s-a)zRla{sajxg( zRGyAJsj>Q`1AVMOWA(}Guk20A({pLiK>7HC?&LQ6(%8WV-N|hl<>RbRh^7(IzAXVa)ji<0MMZ_*=>4HmU<0s`5P;qfzblV0XFRg^bx<{A8{KJsRUC&bKc zs-Bm%QClu*#TzZ@VI5lW#<@NrT58nxyzHY22>Db5)kiJpVHFWnAI&(4v9(bJo|k=C z2O*E&kaPE&pfS2(ZwFtW_^@*CPm$m2KC#!Qu=U**zckacLE z=jAuHGM)d-8_WEikR(Z)R=hEnxzl-!t(-=FgInbyp?Ry<|MZ?*h~R2&0G15 z>&bC&tLGIkx)^1Q&}=HhosQ|5xY?9vjco3ti#@NP;oT@B1hQeKk@Q93?JY-cCy))f zA2}8=yn7nOjIWm|LKz}eU2mgQWn1^iVp7%hgff(S2}+UU>!(rh1rA?_D6jOOJd)>T zog_(H56UAU$}1Z9>ms;Yy~@PG6($!5_^?KKlR%!2Dh6Kk<-S(#5{Tnu!Hd4!7gY=p z$n)v{!H0E$&DvJ4FquZAhLq)NLe8c40Lu^ozu&l{a*syYLrV4$@cWI&%7nI97475_ zpJ~irW99G~t7*(%UAUu9SV%wOhN63ky`TLR2q=v)%aUuj+vP{pj)z{BpxMYgcw zQ;x&4KEo|L;-J1TQl>MlJF-8a{pU?CYUKTqGM%N~WV0ekk~Z?CL!;T5)}p$6b(JXs zIjYg@Bwsqpd{|Tn;_mT9q&P@R<7L85Fk~uCY4C1R95gMIz10v0_4cS@AT0!tK|(%} zOZO)7WZHx%gQ1eXsA8ZD2SKGr9Msz>Fsrn0x diff --git a/samples/src/main/res/values/colors.xml b/samples/src/main/res/values/colors.xml new file mode 100644 index 0000000..2eefbd1 --- /dev/null +++ b/samples/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #3070CC + \ No newline at end of file diff --git a/samples/src/main/res/values/styles.xml b/samples/src/main/res/values/styles.xml index 0be41e3..9e87a32 100644 --- a/samples/src/main/res/values/styles.xml +++ b/samples/src/main/res/values/styles.xml @@ -1,7 +1,21 @@ - + + + + From 23a2b63984a4f81946bf961e0af888472f13d911 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Thu, 5 Mar 2015 00:41:35 +0100 Subject: [PATCH 08/14] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 105453d..36c700a 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,6 @@ v.0.1 beta Usage (Gradle) ============== -``` -repositories { - maven { url 'http://maven.shehabic.com' } -} -``` - ``` dependencies { compile 'com.shehabic.droppy:Droppy:0.1@aar' From d182837d7f3112b3765a196173c4632d99bb8748 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Thu, 5 Mar 2015 00:43:52 +0100 Subject: [PATCH 09/14] Update README.md --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 36c700a..36b7f6c 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,18 @@ Version ======= v.0.1 beta +Usage (Maven) +============= +``` + + com.shehabic.droppy + Droppy + 0.1 + +``` + Usage (Gradle) ============== - ``` dependencies { compile 'com.shehabic.droppy:Droppy:0.1@aar' From 307dbb3323931d32dd1845c5d88021f21311cee3 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Thu, 5 Mar 2015 00:44:03 +0100 Subject: [PATCH 10/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 36b7f6c..16c969e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ v.0.1 beta Usage (Maven) ============= -``` +```XML com.shehabic.droppy Droppy From 092b8c4b665e5d9a95c5e3d87d2f03fcb7dd7569 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Thu, 5 Mar 2015 00:45:08 +0100 Subject: [PATCH 11/14] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 16c969e..43df290 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,8 @@ Usage (Maven) Usage (Gradle) ============== -``` -dependencies { - compile 'com.shehabic.droppy:Droppy:0.1@aar' -} +```groovy +compile 'com.shehabic.droppy:Droppy:0.1@aar' ``` Generate Programmatically From 0918eaa133f09fedc118aa435fecb2e20f2076fa Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Fri, 6 Mar 2015 10:52:46 +0100 Subject: [PATCH 12/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 43df290..561d985 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Usage (Maven) ============= ```XML - com.shehabic.droppy + com.shehabic Droppy 0.1 From d95bee18aece9b1ea01964e55b834f54018746c9 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Fri, 6 Mar 2015 10:53:06 +0100 Subject: [PATCH 13/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 561d985..43df290 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Usage (Maven) ============= ```XML - com.shehabic + com.shehabic.droppy Droppy 0.1 From 94779e7b2a55eb25ffe0c1c074e1773ad9e6abd9 Mon Sep 17 00:00:00 2001 From: Mohamed Shehab Date: Sun, 8 Mar 2015 19:12:10 +0100 Subject: [PATCH 14/14] Adjusting all views and the generation of ui to have eveything styllable --- .../droppy/DroppyMenuItemAbstract.java | 2 +- .../shehabic/droppy/DroppyMenuSeparator.java | 12 +---- .../droppy/views/DroppyMenuSeparator.java | 51 ++++++++++++++++++ .../drawable/droppy_separator_background.xml | 5 ++ .../src/main/res/drawable-hdpi/droppy1.png | Bin 0 -> 1201 bytes .../src/main/res/drawable-hdpi/droppy2.png | Bin 0 -> 1163 bytes .../src/main/res/drawable-hdpi/droppy3.png | Bin 0 -> 1254 bytes .../src/main/res/drawable-hdpi/droppy4.png | Bin 0 -> 1132 bytes .../src/main/res/drawable-mdpi/droppy1.png | Bin 0 -> 805 bytes .../src/main/res/drawable-mdpi/droppy2.png | Bin 0 -> 764 bytes .../src/main/res/drawable-mdpi/droppy3.png | Bin 0 -> 809 bytes .../src/main/res/drawable-mdpi/droppy4.png | Bin 0 -> 770 bytes .../src/main/res/drawable-xhdpi/droppy1.png | Bin 0 -> 1618 bytes .../src/main/res/drawable-xhdpi/droppy2.png | Bin 0 -> 1623 bytes .../src/main/res/drawable-xhdpi/droppy3.png | Bin 0 -> 1708 bytes .../src/main/res/drawable-xhdpi/droppy4.png | Bin 0 -> 1554 bytes .../src/main/res/drawable-xxhdpi/droppy1.png | Bin 0 -> 2694 bytes .../src/main/res/drawable-xxhdpi/droppy2.png | Bin 0 -> 2769 bytes .../src/main/res/drawable-xxhdpi/droppy3.png | Bin 0 -> 2854 bytes .../src/main/res/drawable-xxhdpi/droppy4.png | Bin 0 -> 2583 bytes samples/src/main/res/menu/droppy.xml | 6 ++- 21 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 library/src/main/java/com/shehabic/droppy/views/DroppyMenuSeparator.java create mode 100644 library/src/main/res/drawable/droppy_separator_background.xml create mode 100644 samples/src/main/res/drawable-hdpi/droppy1.png create mode 100644 samples/src/main/res/drawable-hdpi/droppy2.png create mode 100644 samples/src/main/res/drawable-hdpi/droppy3.png create mode 100644 samples/src/main/res/drawable-hdpi/droppy4.png create mode 100644 samples/src/main/res/drawable-mdpi/droppy1.png create mode 100644 samples/src/main/res/drawable-mdpi/droppy2.png create mode 100644 samples/src/main/res/drawable-mdpi/droppy3.png create mode 100644 samples/src/main/res/drawable-mdpi/droppy4.png create mode 100644 samples/src/main/res/drawable-xhdpi/droppy1.png create mode 100644 samples/src/main/res/drawable-xhdpi/droppy2.png create mode 100644 samples/src/main/res/drawable-xhdpi/droppy3.png create mode 100644 samples/src/main/res/drawable-xhdpi/droppy4.png create mode 100644 samples/src/main/res/drawable-xxhdpi/droppy1.png create mode 100644 samples/src/main/res/drawable-xxhdpi/droppy2.png create mode 100644 samples/src/main/res/drawable-xxhdpi/droppy3.png create mode 100644 samples/src/main/res/drawable-xxhdpi/droppy4.png diff --git a/library/src/main/java/com/shehabic/droppy/DroppyMenuItemAbstract.java b/library/src/main/java/com/shehabic/droppy/DroppyMenuItemAbstract.java index 3dc74f2..5033089 100644 --- a/library/src/main/java/com/shehabic/droppy/DroppyMenuItemAbstract.java +++ b/library/src/main/java/com/shehabic/droppy/DroppyMenuItemAbstract.java @@ -26,7 +26,7 @@ public View render(Context context) { if (this.renderedView == null) { this.renderedView = LayoutInflater.from(context).inflate(this.customViewResourceId, null); } - ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); renderedView.setLayoutParams(lp); return renderedView; diff --git a/library/src/main/java/com/shehabic/droppy/DroppyMenuSeparator.java b/library/src/main/java/com/shehabic/droppy/DroppyMenuSeparator.java index 7f061b7..cc67d74 100644 --- a/library/src/main/java/com/shehabic/droppy/DroppyMenuSeparator.java +++ b/library/src/main/java/com/shehabic/droppy/DroppyMenuSeparator.java @@ -1,7 +1,6 @@ package com.shehabic.droppy; import android.content.Context; -import android.view.LayoutInflater; import android.view.View; /** * Created by shehabic on 2/28/15. @@ -9,15 +8,6 @@ public class DroppyMenuSeparator extends DroppyMenuItemAbstract { public DroppyMenuSeparator() { - initSeparator(R.layout.droppy_separator); - } - - public DroppyMenuSeparator(int customSeparatorResourceId) { - initSeparator(customSeparatorResourceId); - } - - protected void initSeparator(int separatorLayoutResourceId) { - customViewResourceId = separatorLayoutResourceId; type = TYPE_MENU_SEPARATOR; setId(-1); setClickable(false); @@ -26,7 +16,7 @@ protected void initSeparator(int separatorLayoutResourceId) { @Override public View render(Context context) { if (renderedView == null) { - renderedView = LayoutInflater.from(context).inflate(this.customViewResourceId, null); + renderedView = new com.shehabic.droppy.views.DroppyMenuSeparator(context); } return renderedView; diff --git a/library/src/main/java/com/shehabic/droppy/views/DroppyMenuSeparator.java b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuSeparator.java new file mode 100644 index 0000000..7199ebf --- /dev/null +++ b/library/src/main/java/com/shehabic/droppy/views/DroppyMenuSeparator.java @@ -0,0 +1,51 @@ +package com.shehabic.droppy.views; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.shehabic.droppy.R; + +/** + * Created by shehabic on 3/8/15. + */ +public class DroppyMenuSeparator extends LinearLayout { + public DroppyMenuSeparator(Context context) { + this(context, null); + } + + public DroppyMenuSeparator(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.droppyMenuSeparatorStyle); + } + + public DroppyMenuSeparator(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DroppyMenuItem, defStyleAttr, 0); + + final Drawable defaultSeparatorBackground = getResources().getDrawable(R.drawable.droppy_separator_background); + final int defaultHeight = getResources().getDimensionPixelSize(R.dimen.default_menu_separator_height); + ViewGroup.LayoutParams lp = getLayoutParams(); + int width = a.getLayoutDimension(R.styleable.DroppyMenuItem_android_layout_width, ViewGroup.LayoutParams.MATCH_PARENT); + int height = a.getLayoutDimension(R.styleable.DroppyMenuItem_android_layout_height, defaultHeight); + if (lp == null) { + lp = new ViewGroup.LayoutParams(width, height); + } else { + lp.width = width; + lp.height = height; + } + setOrientation(LinearLayout.HORIZONTAL); + + Drawable background = a.getDrawable(R.styleable.DroppyMenuSeparator_android_background); + if (background != null) { + setBackgroundDrawable(background); + } else { + setBackgroundDrawable(defaultSeparatorBackground); + } + + this.setLayoutParams(lp); + } +} diff --git a/library/src/main/res/drawable/droppy_separator_background.xml b/library/src/main/res/drawable/droppy_separator_background.xml new file mode 100644 index 0000000..627d143 --- /dev/null +++ b/library/src/main/res/drawable/droppy_separator_background.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/samples/src/main/res/drawable-hdpi/droppy1.png b/samples/src/main/res/drawable-hdpi/droppy1.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c81076f6b5557188c664a8f3fbb48f2827070e GIT binary patch literal 1201 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 Qh5!Hn07*qoM6N<$f=8ZYLjV8( literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-hdpi/droppy4.png b/samples/src/main/res/drawable-hdpi/droppy4.png new file mode 100644 index 0000000000000000000000000000000000000000..dbaeef3048c113f8a2392ff2037858e6b2429ed5 GIT binary patch literal 1132 zcmV-y1e5!TP)|&wVX$9PKXGoBkSZy&(Ed2vp+Okubkn_Dk zox<#z5JPsu5*y>hWGNu5tB3`O;cdapA_L5O@6Kab_9VBO%sJn8?mg$;``s4=IoQky z`W)-1Fv`NH2Oxp+jJl963Zo*7vSS^c89`qju{#8fabcaej4ewVXBvzxVV!r3 z@vf4&AJ)$AW?I)XgFa#i>$)(?_ru!xV*_3aYrW1ylfqcd3;01ISal|vEQPh+T)|J9 zh0B&TIxgS`mzPGK}iP5kl@OCJ=Wl2AG9sJ(-Y=@#--3GsH zS)W*gX-l|a2{)|4v}Ju_Nw>Q~LX3t!;DvN)imTU-@;k-VYeKr@Ln8HZ+AUa*HP3kN z%!_kL{+)So&N80+)I?%om%>`FPqz`mT46ZqPnDq{2nxedzYx~4lhCMbi*+WN^eHwW zJV*<^X+n756U&)s@=%A39oA=)+Lr6jE@dWg{n;g-q87&Lp*yxP%03yfgx6WYH_Z}W zd(AkbywB0h2>N`_HbT1SOF&2${Rrs#z5}3RjQeF@W6S!+dj?qF_{MdN@x4s2&UZlI zOVK>Nk`;W>JiTIBzxc)#*7+a^c9)OWdH!o>1`o3m5QB%E#I%g9nGy5_j&-ynN2IYO zd?+#oQfHqrUGQ;OfFxOy=O{1jI&3hVDV#ViNHsN~_SF|BWfaC2@f z?r8-+Hx~B@;ihH0%`2WTD&DQEtz*Kn5FR;(IEDz}kr0;ikE4r$5bAk5?$!`OJ@7hI z{YQon*8Ud+>L(4P0|NEjidabh6w;ra(I16zyD%J4kugwY3>1bV62|SuZj4G9mmTCi?!cexKFm#^RoW ziGHw*Up)wvGaV&_^}S<^=K;LcN@1;62osj^cUnA-bu{&1P6!)C(!soew_1^O&=USi zB+xv}1woqQGh!n)b9TAT{JhL&}+4fw-ll^{qK zwuG>8oFv3(D1?o+YyT)=D+p3bi>#a0;BMaFt-;-PnQz2yFD(W^T5%UUj`28)9(t4& zhNFJRc%0NWQ;EAxODnH8cIMf8L%5I?_`M-qaEw`DeV@2#Ws%pLmgRv%7@vf7P6!j$ z;A$zXoo)433TtPr!Brtl2*h%3fY6N{t{LeiZxlTBdZoN=@3CRU@^h>e1cy{uX(g0O5SEdB)|J}M<5 ztdPP+#KO)Z5PYo`3*nv}wlLRX^O(oYW@ci@gT*h|`LT*hnHZ@~g z2-h@0R}*xFa7{C|HDgoAtr_1fr2X!`E8zJ_?Lk8`b~J%WwHZ6wgGRvflerC>N@Y~o zscXWG)P@rqH-w$KsZ>U@ow_yt_Ib)sZ_>w8D@oHJ-;#dB!qW0!|&Mh zbzO$p6erJbToV`}e5RCAQeK!4##eEOJ(U>v{9v*R!(U;zu=7pdAL%hZjJv}c6N7-u zdurGe#;=;;s_k$|2&W#Ep64gCMthH(TV}a9W|oU%#xI>T#vI$rwZ`{Hgz#lJJ0dBn zJ!s^J>>EP^Dz15yEeW1<+&XQmAOHDLrVZMiZF8b4e+s`sL!eFvR}^2t1cUhwEAalv1kC z&U9Rf6uT>o7c&7wT;PEpe!0JhGq#x6Cp}k&0VG`z3c^H*%mcyL9tMyI!f+Z2;cMHU zY=M~{AeM&VLL`JeT`i4UA=sG~f}aNguoj|ZDaPA-eIQaZ@&MRMu~PA7gul!(p0NYK zyZwU@eh6br7#<5d*Uh!kaixYdBc+n5Ld!f@RYD~QwTq2S7XRXrj&gs6@nMG z%n-&_cH={a((Pp(%NaYuPF=j>*}MR$#`35V$q88q17Tbd5ASJ)_gQ35eKFZyM|w4j jsBu)6(}W_2bUptE>Q=ykqN@(000000NkvXXu0mjfE2?bR literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-mdpi/droppy2.png b/samples/src/main/res/drawable-mdpi/droppy2.png new file mode 100644 index 0000000000000000000000000000000000000000..8be2f564f04b789991d0375bff4edd1e565f2d06 GIT binary patch literal 764 zcmVDG$<`SNh)_Udq^(s71AUpLTS0NWC}e?y0!RE%9>>=VO?435d*m>5RH z*jJ2Q9eT18`Wt2K7Rm{G+sc3@hQG={ROWlq)hFz2FARJ-4A!;9reeG=3q0{L-fN4^ z(_ye)37jnK5Tlv&3?GQ0r!6+ML0^ZmrbAiN27PU@Nen$=e3)|1kcFL6;M&MNGH{zS zaHm){&IYhmbpC7rTZ(0a81FJR4BToX_liBwfh&d!W$T;eV)rb{);ATyMV`dWNSqFX zbvNw9@JLp+qo}nq4@evQN=6=be;mB)N3B)&Ulg@g$jUY`Ji6(aS`*r0GsD)(b}3J@ z(YjGAKc8RwYpxDi*>?4`#b(CH347a_YG=48@_Z_RG}L(62@iJNNMzE%c%NxeWk6>N zu0qb|wBT=-gtGO`Tw!VcUW~oe?#cdlWw1vX|=Kh z;#$HW(LEc$mOCeO=t-d%yAG>f74T974E}VxgBW^Fn!17*`!lQaKM;r=^WG==ZnqI* zUl7A6C1B8h4Fa0+OG?0???ikg$l&-nC$jb`5isyAB@oJ*lb-R52q+_4FDI~I3d({% zh59HZFp+`=)el_o!s}Rw;)Ue= z+F#Q~ej>)m|rQ1K1kv(K>ST2|B`5~ zB$_Kpdk^GiwTLez@n^ZmulpumAU7(>ev-t0 zQWFOYkgtKbv_Nk3N#yUfeFJEIwi`4zKukbflG^5#j^>n(=A^cHAT9wh0h*f*5&51v z8tQBP9gz7QoFr1nMOCX$B>rEkPblOfAV)D9WG*t5%eToV56OvlbJb`(UF;r_t48BM zyc;@^+vmxSKP-?N1>zrG*zOf_dEL38r;<0Z?%a?`yUR@nnLCKN><{5lUyO%k64HC^rDKsDHV7IUChpYZ!c2BReb#M@r(DKrXXE`nyX z*UbSyvlo_KyFDh4Z(B4jmM-dSI8g9Y0NO5gbwJz2SPIA#Iyg}B_-gSGYn$(A_yt7R z`mSw0mZFC%wIM(q%_R{$7fMHSUYf4{0|!#1;3d(Pf+P{XG}=Vis|_#F&6%hK6oNlM zD~o_)5u1R89}sw3xLIP7_ueGyk_%JbbMD-axo3p%w5^~v$;xFlq0EFTOVl-?sR>P% zs57Ce31wC;yA{+XeQ^_QQ=QLgg%V3Nw6vkmVTp!TC~d0qxuJ;*nfnQruBger_!9RV zvM(%Mv5>i+7>GQ-ayhTbUJp&&8_0Ej<#OJOTq`Uv;lTs=gUQ}8**h)mM`BqB4_aX% z@#cx-WLsLHlv}ROw*7L;)mg1j(qvmnK}2Svkh!1mNxMbZoKLs2avQNV6hg3a8$Q$VWkj_?$)}t1smf|n0Qpp9 z)oU^oNu5YH^J);SGf7>=>T8k2n<3=37k67@lxI-!67!ttmnI1R$_+|tFOA@@s5`{>n#v13ShW9f=JX*ZQL|J}Bec2h>#ADZwMgI|t& zh&~Lt%%H^GX2@l9gkE6fvXM_QlRf@d^0qPA<39Co{1vbLmJyRX{JsF(VNV9y%Secb zbxgM9vwV`wC>!)BrS5esM1MiT(!MfbeOPiPth2PQy|`V1M2HwkMz&?h?iVsQ)4s%o z%+0hRyWdwMMoBUu;zcPF9*nfxoOUyjH%_}5Bkgt^Mxs1Vl;wmsCR}|smfO?P?J>DS zCS1kMyq7HR%*4n(CT$z(*R0b<_Brjg|Mflp4XwQKLqH=e<^TWy07*qoM6N<$g10+o A&;S4c literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xhdpi/droppy1.png b/samples/src/main/res/drawable-xhdpi/droppy1.png new file mode 100644 index 0000000000000000000000000000000000000000..19483f86ce42d904794bf5fecaea5646e283a212 GIT binary patch literal 1618 zcmV-Y2CeytP)1 zPiP%Q7@sCqT2rCqAktonmg>QqFyC%c<<a6hSmnp)J*efScuW96$addVIK(?Cjs}W2J0Z<9tjvX zVc6GQ@MB|JBMDO^_;NMi;3^^fm}Pttd^wUZWyZ#~b`3ls%v8Cu8sV%7!@dT37zwzT zNgEJma+6@furHD@)dQ;i-s+r!puZJw+)4dk2~)Yup=t9~seKy(iXT}!w}#lij}U%J zGY1kdz9H}}Z(qH`L;kx7YCDqV*o;2Cj|usbLwoLZygM}ad040#JRxt8@(!lWH9iVz++%;7?&h_M;oRI#!0asmPI}cDKV7%~EM)-B3 z0JBJ=?(Zc5iw-SI-W7~e17#d(iza|E#$xo3+qQ2)KA)IRh>(w#V&^3gV8XDEkk4A@ zk>p$n`S<@90vKZ~uEPO`7R)~U@rbvlh%{D}1Q=tsL;@~Z{6PFrj!{dPCk*U?wYzk$RY`4*dg zs%(I1a$ot++I9miyh+wvokUyx!yKvYB!sX2%LJIP_K4LF2$;4zK!nSTt)|4Xk8~_*7Ixfo`G{V_D1f*?)mOuz@ zWXaDp&4GW~s|2J5Lbgzt1Yd593_p`;kb*TK4*{v6u%5H4FZJ6>0KX*C1nOB)GCt0o{;{H4rk zamL&iBZT~$PAe_CNdO5rA4yP=1l3R=wep8tb;PZU5&Jzy(#44DYK#P5*1|j52?2y& z*ewDqApRzVnWP%xSi)P5#Z0~$W6XUyO2}_@awyRVuNF$c>b&4~tcG4(8MjqBbK9X! z_L7v6bb0)KlJ0?aGJkC#~+1%2*=9SbC8ZAz#wSPiE?j zF{YJ2L;}v2bpy2?dk%cg!bwIZAP+1x`!Y}SX9Yh}|uolTNW`FPqUz5aauUrmGf$&EQT Qp8x;=07*qoM6N<$f_&EM5&!@I literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xhdpi/droppy2.png b/samples/src/main/res/drawable-xhdpi/droppy2.png new file mode 100644 index 0000000000000000000000000000000000000000..9b99e64b84b19670fcde4b920acef8cb169674be GIT binary patch literal 1623 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 Ef@LoMumAu6 literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xxhdpi/droppy1.png b/samples/src/main/res/drawable-xxhdpi/droppy1.png new file mode 100644 index 0000000000000000000000000000000000000000..8f43193adc8140099cef0475fa6f8cd08dd33045 GIT binary patch literal 2694 zcmV;13VHR3P)m^go1*aR6@v>tPmWeAez=dQ=vKcuJhyJVb>;!e|GNA z?!9aKNb_QO@63GPoqOizoNt6EsM%q^cR`o>LXATvkX0raGX$rM!YL*=XB5mBg7b#p zyiqXI_!~|cf>TT|W&&9aH4ZK4QlB06d-Lv3;mr>Fy`lC>CXiKDIL-ufOnBWWuxSbt zUT1hD0g9(r4Ii>8_NKmlIgvagR;2nA6E`$)GuJ%8` zgs&bOU8s3+vb>?Q_T%A+hM{B zw&Hzoz5cSseMaG55otc3v{ z+c1kPf@!PNM_l`EYqjl6@PjyhffX!<0UpZ+d@a#znC%7pZ&b!ZaWSx!$_^%3i#Zam zq~1HS6@S-8*;r$OItTJwiLppB5(v(u+C?>itmX||YTz4tH>VAG<-|ZNkx;4ZV1>`d z8VP}{CaSDHP}55at*LmehOkvEVl zfYtELdfD6Cs)YLBeeH~PumcC~VuC+Ax0~=ptO_Cxhl_ZO$XX7x3DekSg3^Ob_)pgn z>3qg)YkrR*n9LjOq7xv55Mcn1Ir{^GNvE{|YdKid=!K#YU~9GQM&U`PwiDc7EeF?s zptajr!9?CbcMAbR2vIM4dtE0htYBi@;IFXkK@o$dicEkILNLjiBLP>#vIlEEC?p)o z8{}>zz&z}K%+(=>gd?jy#8xUh4Z(EYAa^4HLI}YMf9TW?g6UPK$Pr1u=o@ZDCLlT@ zKWPa5-Lek~79*1WiU$~yqj>||x_C!A53ReI0Ds{&3gqZ5KeWSsuOXbxAK>-h9M-rm zCv2UJgZ_t{CNYGwwDuU`#a9|6BfJJ$ktGiCZcm`6v_c76B`bgZ_^*foc6& zhf~5RoN5W0!oRP!2ntC)8h0dY1_Er&?_mXhYmEm^iKg&Hs}XQ+t;*v1gv~&J5JE7) zStneLf|=Gs1%JO@WpRAMW+A{Re8T~c8PSw`X~op5ttxc&37drgr$};w^O+GKMEWUe zyGm0bGkowuWz;K!*Nm0;VVTM3A@9qoJ|qwtlq4J(vSXeR-24rH8+rP0N$Hr!%ZNEyPbeWczSEWr!~XV<0NRfs*SkXMj(I*pL2Wr*GSM1 z!aYTa2`<@z19xTB_--eF%LndZg124jT{A^Vhp!B_$=eeSR*y5WSJ20Mf;fWx(Q@8 z%}5CK!TXA;R}`DDw4!|tK;p?(vchYI@Ox=Sg4Oy%p_0#ZG5l9F^Ku#tL7_8(ha1Fk9(jA(D%C zGvQkcNAR;*w4oaaXp4CFk|mX|XNCU=mHbK?zaT{M323W){gNfUz@fQq@tZU^(-oP3 zj$UOF5$;cXg$cntldL5P_AM#_9lgS2$s)r2X|6J1g14FQxk$sOT z{YIV@{>%_Q6$ResnecS(z!&W*!zJ6g%(Ec2b)9ViZ0kbjg4ouT<^{1x!(l@(S@0vr z2Ji$o48depxe$dhTl0HZ%RyE!QN#!cR&bRSOt6-Ng?6%O&04!HEPD_Vju?XJJOyJL z8WJ!a5{`sr532OH6%wPl77+Ecspix*zXOsS2BUD zvchpDn2URd`}vKnfyv?4iT%T}5l_Inp}sV~$xWCB@bg0V)}3Qjcz zMrI7b`KH{?Oyh4jWe83&!B_)q99qz&z9IwuKd})*$Ft-+jQ{`u07*qoM6N<$g3E;! A4*&oF literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xxhdpi/droppy2.png b/samples/src/main/res/drawable-xxhdpi/droppy2.png new file mode 100644 index 0000000000000000000000000000000000000000..dac7019a9d420d289a8db995fb4fe5ade90a9d29 GIT binary patch literal 2769 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 literal 0 HcmV?d00001 diff --git a/samples/src/main/res/drawable-xxhdpi/droppy4.png b/samples/src/main/res/drawable-xxhdpi/droppy4.png new file mode 100644 index 0000000000000000000000000000000000000000..996cf28adf5b9fa7550b993e4e2d3d57017b7e9f GIT binary patch literal 2583 zcmV+y3h4ETP)o>x-DLA{*D^${_k^2c{fPiZnc~ql}Y2;(6$(TkS zCEyyN3~1#3P)VQmO&0}bRUFjYUHemd#6i71su&2B^l6YmLO!99CpB=A$&e=r`Gf`; z43+dn6$A4DX&~+%Uqp%nLf)-GCN#)YX2E~fWJ-ff5b|zP9K_w@i(Knq6-kn`kuMz@ z%}xS2YDe_u!61;M8qH4fr6Wm_HrM(ThB&A%jFjor$on}K8l zh=TgEP)Q#lpK&f^)?WnjnNUez6x5fw*0m+{DD${R8F4LK0l$cm9%UYPt#4DrL4BcC zvQ?v;buLzMK{%_GY%Sd;9d{mCLcn|7zEavUnIho5ap#dGu66f3&+~fJ@IxBexEIFu zuYpaE8h*&B_~chnqnvauhO;2ZN%E`cOngE<I>8Nd^=7M@;Ld@kr#jRrGt>it?>umo9oA#R5Q>_ZU&We<`TnU69__;H98`w+8v%ntv$gTRvk>H!2>sy82N@3fBA@I5@Q%Zs`Rh zQl`^-LJQ?13z}a6jq;IA9|`zUq)g|Gq>?0QOY3&5t_-Ui@HA|0#FrNu@1L>wi+t&D zQ8Y!!?^)D7^%eO&>j40{IAe-MquFVn6ek+wfJN<7Uu}MnUGXb0JFiP9?jB#1)@s@( zMaW;-tjkQ2q>Yfja^fq<(d!ljlj6WtRRaP4L;*i&D*zPmg9QAOlV1SH6e$j_C561( z4WZORWwzJ~K&Z?Xm%bA6?kfnzLA^b#&v!>kgM4D6;Hi<2`^2%Y6IV2eL=^+Bi>e6t zQi%L?(E$jNpLSoREmKj&z-3Yvvz{{=$`{+#%JQPb-?mnkYm_gX`w3TNNj1ozYeLgT zAiIhR0DW>aqBquE5jKe+bm%7w<06qr@kbK|qH3mRol6x8pXtME}!zgMH|(ZCl<;Lo+@ zo38R~z|B|6u@KF(+t-+-tqQ+=jaeF^c~&DIbIyMT3zhVF8oA#!kyeb5$4SX+q&VnZ zcj&IGMekjA=q^$mkdoJI)&ON(T>T!Q3^*q;Ym?Iie3($Ggi z20m8;{>=k`GEl-)gq&`O{f9`I&Ysn^2j)^Skt9i5&+6I(kusg3;y-GTK?3=Yd;k8= zko!xKj3bbL6Ud)K-~6`ciQyHq6}wgRJTbh2RCRshmvr2<-)S<=Svp!K2xM0T)io{# zUu<7vmPSf`L&&=cHz_-|s-a)zRla{sajxg( zRGyAJsj>Q`1AVMOWA(}Guk20A({pLiK>7HC?&LQ6(%8WV-N|hl<>RbRh^7(IzAXVa)ji<0MMZ_*=>4HmU<0s`5P;qfzblV0XFRg^bx<{A8{KJsRUC&bKc zs-Bm%QClu*#TzZ@VI5lW#<@NrT58nxyzHY22>Db5)kiJpVHFWnAI&(4v9(bJo|k=C z2O*E&kaPE&pfS2(ZwFtW_^@*CPm$m2KC#!Qu=U**zckacLE z=jAuHGM)d-8_WEikR(Z)R=hEnxzl-!t(-=FgInbyp?Ry<|MZ?*h~R2&0G15 z>&bC&tLGIkx)^1Q&}=HhosQ|5xY?9vjco3ti#@NP;oT@B1hQeKk@Q93?JY-cCy))f zA2}8=yn7nOjIWm|LKz}eU2mgQWn1^iVp7%hgff(S2}+UU>!(rh1rA?_D6jOOJd)>T zog_(H56UAU$}1Z9>ms;Yy~@PG6($!5_^?KKlR%!2Dh6Kk<-S(#5{Tnu!Hd4!7gY=p z$n)v{!H0E$&DvJ4FquZAhLq)NLe8c40Lu^ozu&l{a*syYLrV4$@cWI&%7nI97475_ zpJ~irW99G~t7*(%UAUu9SV%wOhN63ky`TLR2q=v)%aUuj+vP{pj)z{BpxMYgcw zQ;x&4KEo|L;-J1TQl>MlJF-8a{pU?CYUKTqGM%N~WV0ekk~Z?CL!;T5)}p$6b(JXs zIjYg@Bwsqpd{|Tn;_mT9q&P@R<7L85Fk~uCY4C1R95gMIz10v0_4cS@AT0!tK|(%} zOZO)7WZHx%gQ1eXsA8ZD2SKGr9Msz>Fsrn0x