From b038a44ddb42a7ebc36038b38bc8d5e257fb098d Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Mon, 31 Oct 2011 19:08:51 +0100 Subject: [PATCH 1/4] Made it possible to set a focus point for the popup --- src/net/londatiga/android/QuickAction.java | 68 +++++++++++----------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/net/londatiga/android/QuickAction.java b/src/net/londatiga/android/QuickAction.java index 26391df..d1d9da6 100644 --- a/src/net/londatiga/android/QuickAction.java +++ b/src/net/londatiga/android/QuickAction.java @@ -1,27 +1,24 @@ package net.londatiga.android; -import java.util.ArrayList; -import java.util.List; - import android.content.Context; - import android.graphics.Rect; import android.graphics.drawable.Drawable; - -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.PopupWindow.OnDismissListener; - import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; - import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; +import android.widget.ImageView; +import android.widget.PopupWindow.OnDismissListener; +import android.widget.TextView; +import de.widemeadows.android.froozlepaint.R; + +import java.util.ArrayList; +import java.util.List; /** * QuickAction dialog. @@ -195,51 +192,54 @@ public void run() { public void setOnActionItemClickListener(OnActionItemClickListener listener) { mItemClickListener = listener; } - + /** * Show popup mWindow */ - public void show (View anchor) { + public void show(int focusX, int focusY, View anchor) { preShow(); + mDidAction = false; - int[] location = new int[2]; - - mDidAction = false; - + int[] location = new int[2]; anchor.getLocationOnScreen(location); - - Rect anchorRect = new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1] - + anchor.getHeight()); + Rect anchorRect = new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1] + anchor.getHeight()); //mRootView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mRootView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - - int rootWidth = mRootView.getMeasuredWidth(); - int rootHeight = mRootView.getMeasuredHeight(); - int screenWidth = mWindowManager.getDefaultDisplay().getWidth(); + int screenWidth = mWindowManager.getDefaultDisplay().getWidth(); //int screenHeight = mWindowManager.getDefaultDisplay().getHeight(); - int xPos = (screenWidth - rootWidth) / 2; - int yPos = anchorRect.top - rootHeight; + int rootWidth = mRootView.getMeasuredWidth(); + int rootHeight = mRootView.getMeasuredHeight(); + + if (focusY == Integer.MIN_VALUE) focusY = anchorRect.top; + if (focusX == Integer.MIN_VALUE) focusX = anchorRect.centerX(); + + int xPos = (screenWidth - rootWidth) / 2; + int yPos = focusY - rootHeight; + + boolean onTop = true; - boolean onTop = true; - // display on bottom - if (rootHeight > anchor.getTop()) { - yPos = anchorRect.bottom; - onTop = false; + if (rootHeight > focusY ) { + yPos = focusY; + onTop = false; } - showArrow(((onTop) ? R.id.arrow_down : R.id.arrow_up), anchorRect.centerX()); - + showArrow(((onTop) ? R.id.arrow_down : R.id.arrow_up), focusX); setAnimationStyle(screenWidth, anchorRect.centerX(), onTop); - mWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos, yPos); - if (mAnimateTrack) mTrack.startAnimation(mTrackAnim); } + /** + * Show popup mWindow + */ + public void show (View anchor) { + show(Integer.MIN_VALUE, Integer.MIN_VALUE, anchor); + } + /** * Set animation style * From 37cb575dd7386fa7757166a2a6685161e71a846d Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Mon, 31 Oct 2011 19:09:26 +0100 Subject: [PATCH 2/4] added showOnTop(boolean) method to swap the default orientation --- src/net/londatiga/android/QuickAction.java | 24 +++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/net/londatiga/android/QuickAction.java b/src/net/londatiga/android/QuickAction.java index d1d9da6..341534c 100644 --- a/src/net/londatiga/android/QuickAction.java +++ b/src/net/londatiga/android/QuickAction.java @@ -49,7 +49,8 @@ public class QuickAction extends PopupWindows implements OnDismissListener { public static final int ANIM_GROW_FROM_RIGHT = 2; public static final int ANIM_GROW_FROM_CENTER = 3; public static final int ANIM_AUTO = 4; - + private boolean showOnTop; + /** * Constructor. * @@ -208,7 +209,7 @@ public void show(int focusX, int focusY, View anchor) { mRootView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int screenWidth = mWindowManager.getDefaultDisplay().getWidth(); - //int screenHeight = mWindowManager.getDefaultDisplay().getHeight(); + int screenHeight = mWindowManager.getDefaultDisplay().getHeight(); int rootWidth = mRootView.getMeasuredWidth(); int rootHeight = mRootView.getMeasuredHeight(); @@ -218,14 +219,19 @@ public void show(int focusX, int focusY, View anchor) { int xPos = (screenWidth - rootWidth) / 2; int yPos = focusY - rootHeight; + if (!showOnTop) yPos = focusY; - boolean onTop = true; + boolean onTop = showOnTop; // display on bottom - if (rootHeight > focusY ) { + if (showOnTop && rootHeight > focusY ) { yPos = focusY; onTop = false; } + else if (!showOnTop && rootHeight + focusY > screenHeight) { + onTop = true; + yPos = focusY - rootHeight; + } showArrow(((onTop) ? R.id.arrow_down : R.id.arrow_up), focusX); setAnimationStyle(screenWidth, anchorRect.centerX(), onTop); @@ -313,7 +319,15 @@ public void onDismiss() { mDismissListener.onDismiss(); } } - + + /** + * Sets if the popup should be shown on top by default + * @param showOnTop true to show on top + */ + public void showOnTop(boolean showOnTop) { + this.showOnTop = showOnTop; + } + /** * Listener for item click * From affd65a29e699ae170e040a9c42b6502cd159648 Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Mon, 31 Oct 2011 20:03:03 +0100 Subject: [PATCH 3/4] removed wrong import --- src/net/londatiga/android/QuickAction.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/net/londatiga/android/QuickAction.java b/src/net/londatiga/android/QuickAction.java index 341534c..f176c46 100644 --- a/src/net/londatiga/android/QuickAction.java +++ b/src/net/londatiga/android/QuickAction.java @@ -15,7 +15,6 @@ import android.widget.ImageView; import android.widget.PopupWindow.OnDismissListener; import android.widget.TextView; -import de.widemeadows.android.froozlepaint.R; import java.util.ArrayList; import java.util.List; From aaf4304b120bdcacecbb9bf1246aa684005ca962 Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Sun, 4 Mar 2012 23:46:42 +0100 Subject: [PATCH 4/4] added .gitignore --- .idea/.gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..802cbd8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +workspace.xml +*.iws +dataSources.xml +sqlDataSources.xml +dynamic.xml +.project +.classpath +.settings +bin +out \ No newline at end of file