From c2f242cc9497a3de04fdce8ef3e6372e02f18b3b Mon Sep 17 00:00:00 2001 From: DwGG Date: Mon, 6 Apr 2015 13:50:12 +0800 Subject: [PATCH] for api 10 --- library/build.gradle | 7 +- .../library/FloatingActionButton.java | 2 +- .../library/FloatingActionMenu.java | 15 +++-- .../library/NineOldHelper.java | 17 +++++ .../library/SubActionButton.java | 1 - .../animation/DefaultAnimationHandler.java | 65 ++++++++++++------- .../animation/MenuAnimationHandler.java | 15 +++-- samples/build.gradle | 6 +- .../samples/DemoActivity.java | 4 +- .../samples/MenuInScrollViewActivity.java | 27 ++++---- .../MenuWithCustomActionButtonActivity.java | 5 +- .../MenuWithCustomAnimationActivity.java | 5 +- .../samples/MenuWithFABActivity.java | 23 ++++--- .../samples/MyScrollView.java | 38 +++++++++++ .../samples/SlideInAnimationHandler.java | 23 +++---- .../samples/SystemOverlayMenuActivity.java | 14 +--- .../samples/SystemOverlayMenuService.java | 2 - .../layout/activity_menu_in_scroll_view.xml | 6 +- 18 files changed, 173 insertions(+), 102 deletions(-) mode change 100644 => 100755 library/build.gradle create mode 100755 library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/NineOldHelper.java mode change 100644 => 100755 library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/SubActionButton.java mode change 100644 => 100755 library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/DefaultAnimationHandler.java mode change 100644 => 100755 samples/build.gradle mode change 100644 => 100755 samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/DemoActivity.java mode change 100644 => 100755 samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuInScrollViewActivity.java mode change 100644 => 100755 samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomActionButtonActivity.java mode change 100644 => 100755 samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomAnimationActivity.java mode change 100644 => 100755 samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithFABActivity.java create mode 100755 samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MyScrollView.java mode change 100644 => 100755 samples/src/main/res/layout/activity_menu_in_scroll_view.xml diff --git a/library/build.gradle b/library/build.gradle old mode 100644 new mode 100755 index 47e81e1..2556b40 --- a/library/build.gradle +++ b/library/build.gradle @@ -2,11 +2,11 @@ apply plugin: 'com.android.library' android { compileSdkVersion 21 - buildToolsVersion "21.1.1" + buildToolsVersion "21.1.2" defaultConfig { // applicationId "com.oguzdev.circularfloatingactionmenu.library" - minSdkVersion 15 + minSdkVersion 10 targetSdkVersion 21 versionCode 3 versionName "1.0.2" @@ -26,6 +26,5 @@ repositories { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.nineoldandroids:library:2.4.0' } - -// apply from: '../gradle-mvn-push.gradle' diff --git a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/FloatingActionButton.java b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/FloatingActionButton.java index ad55e84..719d420 100644 --- a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/FloatingActionButton.java +++ b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/FloatingActionButton.java @@ -199,7 +199,7 @@ public void detach() { */ public View getActivityContentView() { try { - return ((Activity) getContext()).getWindow().getDecorView().findViewById(android.R.id.content); + return ((Activity) getContext()).findViewById(android.R.id.content); } catch(ClassCastException e) { throw new ClassCastException("Please provide an Activity context for this FloatingActionButton."); diff --git a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/FloatingActionMenu.java b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/FloatingActionMenu.java index c0764fc..9684435 100644 --- a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/FloatingActionMenu.java +++ b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/FloatingActionMenu.java @@ -21,6 +21,7 @@ import android.view.WindowManager; import android.widget.FrameLayout; +import com.nineoldandroids.view.ViewHelper; import com.oguzdev.circularfloatingactionmenu.library.animation.DefaultAnimationHandler; import com.oguzdev.circularfloatingactionmenu.library.animation.MenuAnimationHandler; @@ -118,7 +119,7 @@ public FloatingActionMenu(final View mainActionView, // and ask the size from the system addViewToCurrentContainer(item.view); // Make item view invisible, just in case - item.view.setAlpha(0); + ViewHelper.setAlpha(item.view, 0); // Wait for the right time item.view.post(new ItemViewQueueListener(item)); } @@ -505,7 +506,13 @@ public void removeViewFromCurrentContainer(View view) { */ private Point getScreenSize() { Point size = new Point(); - getWindowManager().getDefaultDisplay().getSize(size); + if (android.os.Build.VERSION.SDK_INT >= 13) { + getWindowManager().getDefaultDisplay().getSize(size); + } else if (android.os.Build.VERSION.SDK_INT < 13) { + size.x = getWindowManager().getDefaultDisplay().getWidth(); + size.y = getWindowManager().getDefaultDisplay().getHeight(); + } + return size; } @@ -550,7 +557,7 @@ public void run() { item.height = item.view.getMeasuredHeight(); // Revert everything back to normal - item.view.setAlpha(item.alpha); + ViewHelper.setAlpha(item.view, item.alpha); // Remove the item view from view hierarchy removeViewFromCurrentContainer(item.view); } @@ -573,7 +580,7 @@ public Item(View view, int width, int height) { this.view = view; this.width = width; this.height = height; - alpha = view.getAlpha(); + alpha = ViewHelper.getAlpha(view); x = 0; y = 0; } diff --git a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/NineOldHelper.java b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/NineOldHelper.java new file mode 100755 index 0000000..69b1c1d --- /dev/null +++ b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/NineOldHelper.java @@ -0,0 +1,17 @@ +package com.oguzdev.circularfloatingactionmenu.library; + +import android.view.View; + + +import static com.nineoldandroids.view.animation.AnimatorProxy.NEEDS_PROXY; +import static com.nineoldandroids.view.animation.AnimatorProxy.wrap; + +/** + * Created by DwGG on 2015/4/4. + */ +public final class NineOldHelper { + + public static Object getRealTarget(Object obj) { + return (NEEDS_PROXY ? wrap((View) obj) : obj); + } +} diff --git a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/SubActionButton.java b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/SubActionButton.java old mode 100644 new mode 100755 index 606961f..5a45a37 --- a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/SubActionButton.java +++ b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/SubActionButton.java @@ -3,7 +3,6 @@ */ package com.oguzdev.circularfloatingactionmenu.library; -import android.app.Activity; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Build; diff --git a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/DefaultAnimationHandler.java b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/DefaultAnimationHandler.java old mode 100644 new mode 100755 index ce8a212..868673c --- a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/DefaultAnimationHandler.java +++ b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/DefaultAnimationHandler.java @@ -3,15 +3,16 @@ */ package com.oguzdev.circularfloatingactionmenu.library.animation; -import android.animation.Animator; -import android.animation.ObjectAnimator; -import android.animation.PropertyValuesHolder; import android.graphics.Point; -import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.OvershootInterpolator; +import com.nineoldandroids.animation.Animator; +import com.nineoldandroids.animation.ObjectAnimator; +import com.nineoldandroids.animation.PropertyValuesHolder; +import com.nineoldandroids.view.ViewHelper; import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu; +import com.oguzdev.circularfloatingactionmenu.library.NineOldHelper; /** * An example animation handler @@ -30,6 +31,7 @@ public DefaultAnimationHandler() { setAnimating(false); } + @Override public void animateMenuOpening(Point center) { super.animateMenuOpening(center); @@ -39,18 +41,35 @@ public void animateMenuOpening(Point center) { Animator lastAnimation = null; for (int i = 0; i < menu.getSubActionItems().size(); i++) { - menu.getSubActionItems().get(i).view.setScaleX(0); - menu.getSubActionItems().get(i).view.setScaleY(0); - menu.getSubActionItems().get(i).view.setAlpha(0); - - PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(View.TRANSLATION_X, menu.getSubActionItems().get(i).x - center.x + menu.getSubActionItems().get(i).width / 2); - PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, menu.getSubActionItems().get(i).y - center.y + menu.getSubActionItems().get(i).height / 2); - PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat(View.ROTATION, 720); - PropertyValuesHolder pvhsX = PropertyValuesHolder.ofFloat(View.SCALE_X, 1); - PropertyValuesHolder pvhsY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1); - PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat(View.ALPHA, 1); + ViewHelper.setScaleX(menu.getSubActionItems().get(i).view, 0); + ViewHelper.setScaleY(menu.getSubActionItems().get(i).view, 0); + ViewHelper.setAlpha(menu.getSubActionItems().get(i).view, 0); + + PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("translationX", menu.getSubActionItems().get(i).x - center.x + menu.getSubActionItems().get(i).width / 2); + PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("translationY", menu.getSubActionItems().get(i).y - center.y + menu.getSubActionItems().get(i).height / 2); + PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat("rotation", 720); + PropertyValuesHolder pvhsX = PropertyValuesHolder.ofFloat("scaleX", 1); + PropertyValuesHolder pvhsY = PropertyValuesHolder.ofFloat("scaleY", 1); + PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat("alpha", 1); + + final ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(NineOldHelper.getRealTarget(menu.getSubActionItems().get(i).view), pvhX, pvhY, pvhR, pvhsX, pvhsY, pvhA); + + // 使用ValueAnimator,效果同上 +// final ValueAnimator animation = ValueAnimator.ofPropertyValuesHolder(pvhX, pvhY, pvhR, pvhsX, pvhsY, pvhA); +// final View targetView = menu.getSubActionItems().get(i).view; +// animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { +// public void onAnimationUpdate(ValueAnimator animation) { +// +// ViewHelper.setTranslationX(targetView, (Float)animation.getAnimatedValue("translationX")); +// ViewHelper.setTranslationY(targetView, (Float)animation.getAnimatedValue("translationY")); +// ViewHelper.setRotation(targetView, (Float)animation.getAnimatedValue("rotation")); +// ViewHelper.setScaleX(targetView, (Float)animation.getAnimatedValue("scaleX")); +// ViewHelper.setScaleY(targetView, (Float)animation.getAnimatedValue("scaleY")); +// ViewHelper.setAlpha(targetView, (Float)animation.getAnimatedValue("alpha")); +// } +// }); +// animation.setTarget(targetView); - final ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(menu.getSubActionItems().get(i).view, pvhX, pvhY, pvhR, pvhsX, pvhsY, pvhA); animation.setDuration(DURATION); animation.setInterpolator(new OvershootInterpolator(0.9f)); animation.addListener(new SubActionItemAnimationListener(menu.getSubActionItems().get(i), ActionType.OPENING)); @@ -77,14 +96,14 @@ public void animateMenuClosing(Point center) { Animator lastAnimation = null; for (int i = 0; i < menu.getSubActionItems().size(); i++) { - PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(View.TRANSLATION_X, - (menu.getSubActionItems().get(i).x - center.x + menu.getSubActionItems().get(i).width / 2)); - PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, - (menu.getSubActionItems().get(i).y - center.y + menu.getSubActionItems().get(i).height / 2)); - PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat(View.ROTATION, -720); - PropertyValuesHolder pvhsX = PropertyValuesHolder.ofFloat(View.SCALE_X, 0); - PropertyValuesHolder pvhsY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0); - PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat(View.ALPHA, 0); - - final ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(menu.getSubActionItems().get(i).view, pvhX, pvhY, pvhR, pvhsX, pvhsY, pvhA); + PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("translationX", - (menu.getSubActionItems().get(i).x - center.x + menu.getSubActionItems().get(i).width / 2)); + PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("translationY", - (menu.getSubActionItems().get(i).y - center.y + menu.getSubActionItems().get(i).height / 2)); + PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat("rotation", -720); + PropertyValuesHolder pvhsX = PropertyValuesHolder.ofFloat("scaleX", 0); + PropertyValuesHolder pvhsY = PropertyValuesHolder.ofFloat("scaleY", 0); + PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat("alpha", 0); + + final ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(NineOldHelper.getRealTarget(menu.getSubActionItems().get(i).view), pvhX, pvhY, pvhR, pvhsX, pvhsY, pvhA); animation.setDuration(DURATION); animation.setInterpolator(new AccelerateDecelerateInterpolator()); animation.addListener(new SubActionItemAnimationListener(menu.getSubActionItems().get(i), ActionType.CLOSING)); diff --git a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/MenuAnimationHandler.java b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/MenuAnimationHandler.java index fc6134d..7fadbb0 100644 --- a/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/MenuAnimationHandler.java +++ b/library/src/main/java/com/oguzdev/circularfloatingactionmenu/library/animation/MenuAnimationHandler.java @@ -3,12 +3,13 @@ */ package com.oguzdev.circularfloatingactionmenu.library.animation; -import android.animation.Animator; import android.graphics.Point; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.FrameLayout; +import com.nineoldandroids.animation.Animator; +import com.nineoldandroids.view.ViewHelper; import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu; /** @@ -59,12 +60,12 @@ public void animateMenuClosing(Point center) { */ protected void restoreSubActionViewAfterAnimation(FloatingActionMenu.Item subActionItem, ActionType actionType) { ViewGroup.LayoutParams params = subActionItem.view.getLayoutParams(); - subActionItem.view.setTranslationX(0); - subActionItem.view.setTranslationY(0); - subActionItem.view.setRotation(0); - subActionItem.view.setScaleX(1); - subActionItem.view.setScaleY(1); - subActionItem.view.setAlpha(1); + ViewHelper.setTranslationX(subActionItem.view, 0); + ViewHelper.setTranslationY(subActionItem.view, 0); + ViewHelper.setRotation(subActionItem.view, 0); + ViewHelper.setScaleX(subActionItem.view, 1); + ViewHelper.setScaleY(subActionItem.view, 1); + ViewHelper.setAlpha(subActionItem.view, 1); if(actionType == ActionType.OPENING) { FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) params; if(menu.isSystemOverlay()) { diff --git a/samples/build.gradle b/samples/build.gradle old mode 100644 new mode 100755 index 82f8e94..1f3a494 --- a/samples/build.gradle +++ b/samples/build.gradle @@ -2,11 +2,11 @@ apply plugin: 'com.android.application' android { compileSdkVersion 21 - buildToolsVersion "21.1.1" + buildToolsVersion "21.1.2" defaultConfig { applicationId "com.oguzdev.circularfloatingactionmenu.samples" - minSdkVersion 15 + minSdkVersion 10 targetSdkVersion 21 versionCode 3 versionName "1.0.2" @@ -22,6 +22,6 @@ android { dependencies { compile project(':library') compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:support-v4:21.+' + compile 'com.android.support:support-v4:21.0.3' compile 'com.android.support:appcompat-v7:+' } diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/DemoActivity.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/DemoActivity.java old mode 100644 new mode 100755 index 6874c45..7518b8b --- a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/DemoActivity.java +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/DemoActivity.java @@ -1,8 +1,8 @@ package com.oguzdev.circularfloatingactionmenu.samples; -import android.app.Fragment; import android.content.Intent; import android.os.Bundle; +import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; @@ -20,7 +20,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo); if (savedInstanceState == null) { - getFragmentManager().beginTransaction() + getSupportFragmentManager().beginTransaction() .add(R.id.container, new ContentFragment()) .commit(); } diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuInScrollViewActivity.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuInScrollViewActivity.java old mode 100644 new mode 100755 index 458ce48..7145516 --- a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuInScrollViewActivity.java +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuInScrollViewActivity.java @@ -1,6 +1,5 @@ package com.oguzdev.circularfloatingactionmenu.samples; -import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; @@ -11,14 +10,13 @@ import android.view.ViewTreeObserver; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.ScrollView; import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu; import com.oguzdev.circularfloatingactionmenu.library.SubActionButton; import java.util.ArrayList; -public class MenuInScrollViewActivity extends ActionBarActivity implements FloatingActionMenu.MenuStateChangeListener, ViewTreeObserver.OnScrollChangedListener, View.OnLayoutChangeListener { +public class MenuInScrollViewActivity extends ActionBarActivity implements FloatingActionMenu.MenuStateChangeListener, ViewTreeObserver.OnScrollChangedListener, MyScrollView.OnSizeChangeListener { private ArrayList menus; private FloatingActionMenu currentMenu; @@ -31,7 +29,7 @@ protected void onCreate(Bundle savedInstanceState) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); - final ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView); + final MyScrollView scrollView = (MyScrollView) findViewById(R.id.scrollView); LinearLayout scrollViewBody = (LinearLayout) findViewById(R.id.scrollViewBody); menus = new ArrayList(); @@ -97,7 +95,8 @@ protected void onCreate(Bundle savedInstanceState) { .build(); // Listen layout (size) changes on a main layout so that we could reposition the bottom menu - scrollView.addOnLayoutChangeListener(this); +// scrollView.addOnLayoutChangeListener(this); + scrollView.addSizeChangeListener(this); } @@ -146,12 +145,18 @@ public void onScrollChanged() { } } +// @Override +// public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { +// // update the position of the menu when the main layout changes size on events like soft keyboard open/close +// if(right - left != 0 && bottom - top != 0 && +// (oldLeft != left || oldTop != top || oldRight != right || oldBottom != bottom) && bottomMenu != null) { +// bottomMenu.updateItemPositions(); +// } +// } + + @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - // update the position of the menu when the main layout changes size on events like soft keyboard open/close - if(right - left != 0 && bottom - top != 0 && - (oldLeft != left || oldTop != top || oldRight != right || oldBottom != bottom) && bottomMenu != null) { - bottomMenu.updateItemPositions(); - } + public void onSizeChange(View v, int w, int h, int oldw, int oldh) { + bottomMenu.updateItemPositions(); } } diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomActionButtonActivity.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomActionButtonActivity.java old mode 100644 new mode 100755 index 31a07de..68e4e74 --- a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomActionButtonActivity.java +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomActionButtonActivity.java @@ -1,8 +1,7 @@ package com.oguzdev.circularfloatingactionmenu.samples; -import android.app.Activity; -import android.app.Fragment; import android.os.Bundle; +import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; @@ -23,7 +22,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu_with_custom_action_button); if (savedInstanceState == null) { - getFragmentManager().beginTransaction() + getSupportFragmentManager().beginTransaction() .add(R.id.container, new CustomButtonDemoFragment()) .commit(); } diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomAnimationActivity.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomAnimationActivity.java old mode 100644 new mode 100755 index c6bc89e..b1fd9e1 --- a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomAnimationActivity.java +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithCustomAnimationActivity.java @@ -1,8 +1,7 @@ package com.oguzdev.circularfloatingactionmenu.samples; -import android.app.Activity; -import android.app.Fragment; import android.os.Bundle; +import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; @@ -22,7 +21,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu_with_custom_animation); if (savedInstanceState == null) { - getFragmentManager().beginTransaction() + getSupportFragmentManager().beginTransaction() .add(R.id.container, new CustomAnimationDemoFragment()) .commit(); } diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithFABActivity.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithFABActivity.java old mode 100644 new mode 100755 index 9e88fce..157c03f --- a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithFABActivity.java +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MenuWithFABActivity.java @@ -1,16 +1,13 @@ package com.oguzdev.circularfloatingactionmenu.samples; -import android.animation.ObjectAnimator; -import android.animation.PropertyValuesHolder; -import android.app.Activity; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; +import com.nineoldandroids.animation.ObjectAnimator; import com.oguzdev.circularfloatingactionmenu.library.FloatingActionButton; import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu; import com.oguzdev.circularfloatingactionmenu.library.SubActionButton; @@ -56,19 +53,21 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onMenuOpened(FloatingActionMenu menu) { // Rotate the icon of rightLowerButton 45 degrees clockwise - fabIconNew.setRotation(0); - PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat(View.ROTATION, 45); - ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(fabIconNew, pvhR); - animation.start(); +// ViewHelper.setRotation(fabIconNew, 0); +// PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat("rotation", 45); +// ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(fabIconNew, pvhR); +// animation.start(); + ObjectAnimator.ofFloat(fabIconNew, "rotation", 0, 45).setDuration(1000).start(); } @Override public void onMenuClosed(FloatingActionMenu menu) { // Rotate the icon of rightLowerButton 45 degrees counter-clockwise - fabIconNew.setRotation(45); - PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat(View.ROTATION, 0); - ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(fabIconNew, pvhR); - animation.start(); +// ViewHelper.setRotation(fabIconNew, 45); +// PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat("rotation", 0); +// ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(fabIconNew, pvhR); +// animation.start(); + ObjectAnimator.ofFloat(fabIconNew, "rotation", 45, 0).setDuration(1000).start(); } }); diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MyScrollView.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MyScrollView.java new file mode 100755 index 0000000..57129e2 --- /dev/null +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/MyScrollView.java @@ -0,0 +1,38 @@ +package com.oguzdev.circularfloatingactionmenu.samples; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ScrollView; + +/** + * Capture Layout resize before API 11 + * + * @see onsizechanged + */ +public class MyScrollView extends ScrollView { + + private OnSizeChangeListener listener; + + public interface OnSizeChangeListener { + void onSizeChange(View v, int w, int h, int oldw, int oldh); + } + + public MyScrollView(Context context) { + super(context); + } + + public MyScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + listener.onSizeChange(this, w, h, oldw, oldh); + } + + public void addSizeChangeListener(OnSizeChangeListener listener) { + this.listener = listener; + } +} diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SlideInAnimationHandler.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SlideInAnimationHandler.java index 9b13d7f..43be51a 100644 --- a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SlideInAnimationHandler.java +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SlideInAnimationHandler.java @@ -1,15 +1,16 @@ package com.oguzdev.circularfloatingactionmenu.samples; -import android.animation.Animator; -import android.animation.ObjectAnimator; -import android.animation.PropertyValuesHolder; import android.graphics.Point; -import android.view.View; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.widget.FrameLayout; +import com.nineoldandroids.animation.Animator; +import com.nineoldandroids.animation.ObjectAnimator; +import com.nineoldandroids.animation.PropertyValuesHolder; +import com.nineoldandroids.view.ViewHelper; import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu; +import com.oguzdev.circularfloatingactionmenu.library.NineOldHelper; import com.oguzdev.circularfloatingactionmenu.library.animation.MenuAnimationHandler; /** @@ -40,19 +41,19 @@ public void animateMenuOpening(Point center) { Animator lastAnimation = null; for (int i = 0; i < menu.getSubActionItems().size(); i++) { - menu.getSubActionItems().get(i).view.setAlpha(0); + ViewHelper.setAlpha(menu.getSubActionItems().get(i).view, 0); FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) menu.getSubActionItems().get(i).view.getLayoutParams(); params.setMargins(menu.getSubActionItems().get(i).x, menu.getSubActionItems().get(i).y + DIST_Y, 0, 0); menu.getSubActionItems().get(i).view.setLayoutParams(params); // PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(View.TRANSLATION_X, menu.getSubActionItems().get(i).x/* - center.x + menu.getSubActionItems().get(i).width / 2*/); - PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, -DIST_Y); + PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("translationY", -DIST_Y); // PropertyValuesHolder pvhsX = PropertyValuesHolder.ofFloat(View.SCALE_X, 1); // PropertyValuesHolder pvhsY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1); - PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat(View.ALPHA, 1); + PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat("alpha", 1); - final ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(menu.getSubActionItems().get(i).view, pvhY, pvhA); + final ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(NineOldHelper.getRealTarget(menu.getSubActionItems().get(i).view), pvhY, pvhA); animation.setDuration(DURATION); animation.setInterpolator(new DecelerateInterpolator()); animation.addListener(new SubActionItemAnimationListener(menu.getSubActionItems().get(i), ActionType.OPENING)); @@ -79,12 +80,12 @@ public void animateMenuClosing(Point center) { Animator lastAnimation = null; for (int i = 0; i < menu.getSubActionItems().size(); i++) { // PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(View.TRANSLATION_X, - (menu.getSubActionItems().get(i).x - center.x + menu.getSubActionItems().get(i).width / 2)); - PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, DIST_Y); + PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("translationY", DIST_Y); // PropertyValuesHolder pvhsX = PropertyValuesHolder.ofFloat(View.SCALE_X, 0); // PropertyValuesHolder pvhsY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0); - PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat(View.ALPHA, 0); + PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat("alpha", 0); - final ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(menu.getSubActionItems().get(i).view, pvhY, pvhA); + final ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(NineOldHelper.getRealTarget(menu.getSubActionItems().get(i).view), pvhY, pvhA); animation.setDuration(DURATION); animation.setInterpolator(new AccelerateInterpolator()); animation.addListener(new SubActionItemAnimationListener(menu.getSubActionItems().get(i), ActionType.CLOSING)); diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SystemOverlayMenuActivity.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SystemOverlayMenuActivity.java index ce3e235..99ea3d3 100644 --- a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SystemOverlayMenuActivity.java +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SystemOverlayMenuActivity.java @@ -1,24 +1,14 @@ package com.oguzdev.circularfloatingactionmenu.samples; -import android.content.ComponentName; -import android.content.Context; import android.content.Intent; -import android.content.ServiceConnection; import android.os.Bundle; -import android.os.IBinder; -import android.support.v7.app.ActionBarActivity; +import android.support.v4.app.FragmentActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; -import android.widget.FrameLayout; -import android.widget.ImageView; -import com.oguzdev.circularfloatingactionmenu.library.FloatingActionButton; -import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu; -import com.oguzdev.circularfloatingactionmenu.library.SubActionButton; - -public class SystemOverlayMenuActivity extends ActionBarActivity { +public class SystemOverlayMenuActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { diff --git a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SystemOverlayMenuService.java b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SystemOverlayMenuService.java index c611cb3..05e0e08 100644 --- a/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SystemOverlayMenuService.java +++ b/samples/src/main/java/com/oguzdev/circularfloatingactionmenu/samples/SystemOverlayMenuService.java @@ -4,12 +4,10 @@ import android.content.Intent; import android.os.Binder; import android.os.IBinder; -import android.util.Log; import android.view.View; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.TextView; import com.oguzdev.circularfloatingactionmenu.library.FloatingActionButton; import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu; diff --git a/samples/src/main/res/layout/activity_menu_in_scroll_view.xml b/samples/src/main/res/layout/activity_menu_in_scroll_view.xml old mode 100644 new mode 100755 index bf00b92..732ecd3 --- a/samples/src/main/res/layout/activity_menu_in_scroll_view.xml +++ b/samples/src/main/res/layout/activity_menu_in_scroll_view.xml @@ -33,7 +33,7 @@ tools:context="com.oguzdev.circularfloatingactionmenu.samples.MenuInScrollViewAc android:layout_margin="6dp" android:layout_alignParentRight="true" android:src="@drawable/ic_action_send_now_light" - style="?android:attr/buttonBarButtonStyle" /> + style="android:attr/buttonBarButtonStyle" /> - +