From bad7257329b38fca2d58f9cced626e0e0e7493fc Mon Sep 17 00:00:00 2001 From: caijw Date: Mon, 31 Oct 2016 20:33:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E7=BD=AEBubble=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E6=97=B6=E4=B8=8D=E5=86=8D=E7=AB=8B=E5=8D=B3=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E5=88=B7=E6=96=B0=EF=BC=8C=E5=BF=85=E9=A1=BB=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E8=B0=83=E7=94=A8requestUpdateBubble=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E9=87=8D=E5=A4=8D=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/bubbleview/BubbleFrameLayout.java | 4 +- .../cpiz/android/bubbleview/BubbleImpl.java | 44 +------------------ .../bubbleview/BubbleLinearLayout.java | 4 +- .../android/bubbleview/BubblePopupWindow.java | 3 +- .../bubbleview/BubbleRelativeLayout.java | 4 +- .../cpiz/android/bubbleview/BubbleStyle.java | 33 ++++++++++++-- .../android/bubbleview/BubbleTextView.java | 4 +- .../BubbleTextViewSampleActivity.java | 2 +- 8 files changed, 41 insertions(+), 57 deletions(-) diff --git a/library/src/main/java/com/cpiz/android/bubbleview/BubbleFrameLayout.java b/library/src/main/java/com/cpiz/android/bubbleview/BubbleFrameLayout.java index b66efc2..87b3435 100644 --- a/library/src/main/java/com/cpiz/android/bubbleview/BubbleFrameLayout.java +++ b/library/src/main/java/com/cpiz/android/bubbleview/BubbleFrameLayout.java @@ -241,7 +241,7 @@ public int getSuperPaddingBottom() { } @Override - public void updateDrawable() { - mBubbleImpl.updateDrawable(); + public void requestUpdateBubble() { + mBubbleImpl.requestUpdateBubble(); } } diff --git a/library/src/main/java/com/cpiz/android/bubbleview/BubbleImpl.java b/library/src/main/java/com/cpiz/android/bubbleview/BubbleImpl.java index dac968f..c614ffb 100644 --- a/library/src/main/java/com/cpiz/android/bubbleview/BubbleImpl.java +++ b/library/src/main/java/com/cpiz/android/bubbleview/BubbleImpl.java @@ -43,7 +43,7 @@ class BubbleImpl implements BubbleStyle { private View.OnLayoutChangeListener mOnLayoutChangeListener = new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - updateDrawable(); + requestUpdateBubble(); } }; @@ -76,15 +76,9 @@ void init(View view, Context context, AttributeSet attrs) { updateDrawable(mParentView.getWidth(), mParentView.getHeight(), false); } - /** - * 设置箭头朝向 - * - * @param arrowDirection 上下左右或者无 - */ @Override public void setArrowDirection(ArrowDirection arrowDirection) { mArrowDirection = arrowDirection; - updateDrawable(); } @Override @@ -92,15 +86,9 @@ public ArrowDirection getArrowDirection() { return mArrowDirection; } - /** - * 设置箭头三角形厚度 - * - * @param arrowHeight 箭头厚度 - */ @Override public void setArrowHeight(float arrowHeight) { mArrowHeight = arrowHeight; - updateDrawable(); } @Override @@ -108,15 +96,9 @@ public float getArrowHeight() { return mArrowHeight; } - /** - * 设置箭头三角形底宽 - * - * @param arrowWidth 箭头底边宽度 - */ @Override public void setArrowWidth(float arrowWidth) { mArrowWidth = arrowWidth; - updateDrawable(); } @Override @@ -124,28 +106,13 @@ public float getArrowWidth() { return mArrowWidth; } - /** - * 设置箭头在边线上的位置策略 - * - * @param policy 箭头位置策略 - */ public void setArrowPosPolicy(ArrowPosPolicy policy) { mArrowPosPolicy = policy; - updateDrawable(); } - /** - * 设置箭头在所在边线上的偏移距离 - * 视 ArrowPosPolicy 而定,为 TargetCenter 或 SelfCenter 时无意义 - * - * @param delta 基于箭头位置策略,相应的偏差 - * 朝上/下时在X轴方向偏移,朝左/右时在Y轴方向偏移 - * 值必须 >0,视 ArrowPosPolicy 从首段或尾端开始偏移 - */ @Override public void setArrowPosDelta(float delta) { mArrowPosDelta = delta; - updateDrawable(); } public ArrowPosPolicy getArrowPosPolicy() { @@ -166,14 +133,12 @@ public float getArrowPosDelta() { public void setArrowTo(int targetViewId) { mArrowToViewId = targetViewId; setArrowToRef(null); // 先不设置,在updateDrawable会重新寻找 - updateDrawable(); } @Override public void setArrowTo(View targetView) { mArrowToViewId = targetView != null ? targetView.getId() : 0; setArrowToRef(targetView); - updateDrawable(); } public View getArrowTo() { @@ -188,7 +153,6 @@ public View getArrowTo() { @Override public void setFillColor(int fillColor) { mFillColor = fillColor; - updateDrawable(); } @Override @@ -204,7 +168,6 @@ public int getFillColor() { @Override public void setBorderColor(int borderColor) { mBorderColor = borderColor; - updateDrawable(); } @Override @@ -220,7 +183,6 @@ public int getBorderColor() { @Override public void setBorderWidth(float borderWidth) { mBorderWidth = borderWidth; - updateDrawable(); } @Override @@ -236,7 +198,6 @@ public float getBorderWidth() { @Override public void setFillPadding(float fillPadding) { mFillPadding = fillPadding; - updateDrawable(); } @Override @@ -259,7 +220,6 @@ public void setCornerRadius(float topLeft, float topRight, float bottomRight, fl mCornerTopRightRadius = topRight; mCornerBottomRightRadius = bottomRight; mCornerBottomLeftRadius = bottomLeft; - updateDrawable(); } @Override @@ -403,7 +363,7 @@ void updateDrawable(int width, int height, boolean drawImmediately) { } @Override - public void updateDrawable() { + public void requestUpdateBubble() { updateDrawable(mParentView.getWidth(), mParentView.getHeight(), true); } diff --git a/library/src/main/java/com/cpiz/android/bubbleview/BubbleLinearLayout.java b/library/src/main/java/com/cpiz/android/bubbleview/BubbleLinearLayout.java index 6d44e1c..ee6a48a 100644 --- a/library/src/main/java/com/cpiz/android/bubbleview/BubbleLinearLayout.java +++ b/library/src/main/java/com/cpiz/android/bubbleview/BubbleLinearLayout.java @@ -241,7 +241,7 @@ public int getSuperPaddingBottom() { } @Override - public void updateDrawable() { - mBubbleImpl.updateDrawable(); + public void requestUpdateBubble() { + mBubbleImpl.requestUpdateBubble(); } } diff --git a/library/src/main/java/com/cpiz/android/bubbleview/BubblePopupWindow.java b/library/src/main/java/com/cpiz/android/bubbleview/BubblePopupWindow.java index 7bd3372..46a8965 100644 --- a/library/src/main/java/com/cpiz/android/bubbleview/BubblePopupWindow.java +++ b/library/src/main/java/com/cpiz/android/bubbleview/BubblePopupWindow.java @@ -169,8 +169,6 @@ public void showArrowTo(View anchor, RelativePos relativePos, int marginH, int m final int navigationBarHeight = getDeltaNavigationBarHeight(anchor); final Rect anchorRect = getRectInWindow(anchor); - ArrowDirection direction = relativePos.getArrowDirection(); - mBubbleView.setArrowDirection(direction); getContentView().measure( View.MeasureSpec.makeMeasureSpec(screenWidth - 2 * mPadding, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(screenHeight - 2 * mPadding, View.MeasureSpec.AT_MOST)); @@ -190,6 +188,7 @@ public void showArrowTo(View anchor, RelativePos relativePos, int marginH, int m showAtLocation(anchor, outProp.gravity, outProp.x, outProp.y); mBubbleView.setArrowPosPolicy(outProp.arrowPosPolicy); mBubbleView.setArrowTo(anchor); + mBubbleView.requestUpdateBubble(); if (mDelayMillis > 0) { setCancelOnLater(mDelayMillis); diff --git a/library/src/main/java/com/cpiz/android/bubbleview/BubbleRelativeLayout.java b/library/src/main/java/com/cpiz/android/bubbleview/BubbleRelativeLayout.java index 25e32ab..d0355bf 100644 --- a/library/src/main/java/com/cpiz/android/bubbleview/BubbleRelativeLayout.java +++ b/library/src/main/java/com/cpiz/android/bubbleview/BubbleRelativeLayout.java @@ -241,7 +241,7 @@ public int getSuperPaddingBottom() { } @Override - public void updateDrawable() { - mBubbleImpl.updateDrawable(); + public void requestUpdateBubble() { + mBubbleImpl.requestUpdateBubble(); } } diff --git a/library/src/main/java/com/cpiz/android/bubbleview/BubbleStyle.java b/library/src/main/java/com/cpiz/android/bubbleview/BubbleStyle.java index 898d285..c76432b 100644 --- a/library/src/main/java/com/cpiz/android/bubbleview/BubbleStyle.java +++ b/library/src/main/java/com/cpiz/android/bubbleview/BubbleStyle.java @@ -11,9 +11,12 @@ */ public interface BubbleStyle { /** - * 箭头朝向枚举 + * 箭头朝向定义 */ enum ArrowDirection { + /** + * 无箭头 + */ None(0), Left(1), Up(2), @@ -62,10 +65,28 @@ public boolean isDown() { } } + /** + * 箭头位置策略定义 + */ enum ArrowPosPolicy { + /** + * 箭头指向目标View的中心点 + */ TargetCenter(0), + + /** + * 箭头从自己的中心点发出 + */ SelfCenter(1), + + /** + * 结合setArrowPosDelta,箭头从所在轴的头端开始偏移 + */ SelfBegin(2), + + /** + * 结合setArrowPosDelta,箭头从所在轴的尾端开始偏移 + */ SelfEnd(3); private static final SparseArray intToTypeDict = new SparseArray<>(); @@ -135,8 +156,8 @@ public static ArrowPosPolicy valueOf(int value) { * 视 ArrowPosPolicy 而定,为 TargetCenter 或 SelfCenter 时无意义 * * @param delta 基于箭头位置策略,相应的偏差 - * 朝上/下时在X轴方向偏移,朝左/右时在Y轴方向偏移 - * 值必须 >0,视 ArrowPosPolicy 从首段或尾端开始偏移 + * 朝上/下时在X轴方向偏移,朝左/右时在Y轴方向偏移 + * 值必须 >0,视 ArrowPosPolicy 从首段或尾端开始偏移 */ void setArrowPosDelta(float delta); @@ -230,5 +251,9 @@ public static ArrowPosPolicy valueOf(int value) { int getPaddingBottom(); - void updateDrawable(); + /** + * 请求刷新UI样式 + * 设置好以上属性后,调用该函数进行刷新 + */ + void requestUpdateBubble(); } diff --git a/library/src/main/java/com/cpiz/android/bubbleview/BubbleTextView.java b/library/src/main/java/com/cpiz/android/bubbleview/BubbleTextView.java index 1538ee6..129ff29 100644 --- a/library/src/main/java/com/cpiz/android/bubbleview/BubbleTextView.java +++ b/library/src/main/java/com/cpiz/android/bubbleview/BubbleTextView.java @@ -241,7 +241,7 @@ public int getSuperPaddingBottom() { } @Override - public void updateDrawable() { - mBubbleImpl.updateDrawable(); + public void requestUpdateBubble() { + mBubbleImpl.requestUpdateBubble(); } } diff --git a/sample/src/main/java/com/cpiz/android/bubbleviewsample/BubbleTextViewSampleActivity.java b/sample/src/main/java/com/cpiz/android/bubbleviewsample/BubbleTextViewSampleActivity.java index 935b2ff..838fccb 100644 --- a/sample/src/main/java/com/cpiz/android/bubbleviewsample/BubbleTextViewSampleActivity.java +++ b/sample/src/main/java/com/cpiz/android/bubbleviewsample/BubbleTextViewSampleActivity.java @@ -24,6 +24,6 @@ protected void onCreate(Bundle savedInstanceState) { @OnClick({R.id.view_anchor}) public void onClick(View view) { - mBubbleTextSample.updateDrawable(); + mBubbleTextSample.requestUpdateBubble(); } }