Skip to content

Commit 619062c

Browse files
VSpotView2
1 parent d512378 commit 619062c

File tree

4 files changed

+56
-8
lines changed

4 files changed

+56
-8
lines changed

library/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
namespace 'com.developer.spoti.vspoti'
99
minSdkVersion 23
1010
targetSdkVersion 35
11-
versionCode 8
12-
versionName "3.2.5"
11+
versionCode 9
12+
versionName "3.3.5"
1313
}
1414

1515
compileOptions {

library/src/main/java/com/developer/spoti/vspoti/VSpotMessageView2.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import android.content.Context;
44
import android.graphics.Color;
5-
import android.graphics.Paint;
6-
import android.graphics.Path;
75
import android.graphics.Typeface;
86
import android.text.Spannable;
97
import android.util.TypedValue;

library/src/main/java/com/developer/spoti/vspoti/VSpotView2.java

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class VSpotView2 extends FrameLayout {
1515
private float density;
1616
private List<View> targetViews;
1717
private List<RectF> targetRects;
18-
private VSpotMessageView mMessageView;
18+
private VSpotMessageView2 mMessageView;
1919
private Gravity mGravity = Gravity.auto;
2020
private DismissType dismissType = DismissType.outside; // Default value
2121
private boolean mIsShowing = false;
@@ -61,7 +61,7 @@ private VSpotView2(Context context, List<View> views) {
6161
}
6262

6363
// Message view
64-
mMessageView = new VSpotMessageView(context);
64+
mMessageView = new VSpotMessageView2(context);
6565
addView(mMessageView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
6666

6767
// Wait for layout to complete before positioning
@@ -118,6 +118,56 @@ protected void onDraw(Canvas canvas) {
118118
}
119119
}
120120

121+
private void drawArrowToTarget(Canvas canvas) {
122+
RectF target = targetRects.get(currentTargetIndex);
123+
float targetCenterX = target.centerX();
124+
float targetTopY = target.top;
125+
float targetBottomY = target.bottom;
126+
127+
float messageX = mMessageView.getX();
128+
float messageY = mMessageView.getY();
129+
float messageWidth = mMessageView.getWidth();
130+
float messageHeight = mMessageView.getHeight();
131+
132+
float arrowCenterX = Math.max(messageX, Math.min(targetCenterX, messageX + messageWidth));
133+
float arrowTipX = arrowCenterX;
134+
float arrowTipY;
135+
boolean drawArrowDownward;
136+
137+
if (messageY > targetBottomY) {
138+
// Message is below target – arrow points up
139+
arrowTipY = messageY;
140+
drawArrowDownward = false;
141+
} else {
142+
// Message is above target – arrow points down
143+
arrowTipY = messageY + messageHeight;
144+
drawArrowDownward = true;
145+
}
146+
147+
float halfWidth = ARROW_WIDTH / 2f;
148+
float height = ARROW_HEIGHT;
149+
150+
arrowPath.reset();
151+
152+
if (drawArrowDownward) {
153+
// Pointing downward
154+
arrowPath.moveTo(arrowTipX, arrowTipY);
155+
arrowPath.lineTo(arrowTipX - halfWidth, arrowTipY - height);
156+
arrowPath.lineTo(arrowTipX + halfWidth, arrowTipY - height);
157+
} else {
158+
// Pointing upward
159+
arrowPath.moveTo(arrowTipX, arrowTipY);
160+
arrowPath.lineTo(arrowTipX - halfWidth, arrowTipY + height);
161+
arrowPath.lineTo(arrowTipX + halfWidth, arrowTipY + height);
162+
}
163+
164+
arrowPath.close();
165+
166+
arrowPaint.setColor(Color.WHITE); // same as message background
167+
arrowPaint.setStyle(Paint.Style.FILL);
168+
canvas.drawPath(arrowPath, arrowPaint);
169+
}
170+
121171

122172
public void nextTarget() {
123173
if (currentTargetIndex < targetViews.size() - 1) {

sample/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ android {
66
namespace 'com.developer.spoti.vspot'
77
minSdkVersion 23
88
targetSdkVersion 35
9-
versionCode 8
10-
versionName "3.2.5"
9+
versionCode 9
10+
versionName "3.3.5"
1111
}
1212

1313
compileOptions {

0 commit comments

Comments
 (0)