diff --git a/build.gradle b/build.gradle
index 37358fa..3c1b2fd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,7 +3,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.2.3'
+ classpath 'com.android.tools.build:gradle:2.3.3'
}
}
@@ -16,3 +16,5 @@ allprojects {
task wrapper(type: Wrapper) {
gradleVersion = '2.4'
}
+
+
diff --git a/example/build.gradle b/example/build.gradle
index 1404573..aab0e75 100644
--- a/example/build.gradle
+++ b/example/build.gradle
@@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 22
- buildToolsVersion "22.0.1"
+ buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.venmo.view.tooltip.example"
diff --git a/example/src/androidTest/java/com/venmo/view/tooltip/example/ApplicationTest.java b/example/src/androidTest/java/com/venmo/view/tooltip/example/ApplicationTest.java
deleted file mode 100644
index 75b44b2..0000000
--- a/example/src/androidTest/java/com/venmo/view/tooltip/example/ApplicationTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.venmo.view.tooltip.example;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
diff --git a/example/src/main/res/layout/activity_tooltip.xml b/example/src/main/res/layout/activity_tooltip.xml
index 1397d0f..44d9d34 100644
--- a/example/src/main/res/layout/activity_tooltip.xml
+++ b/example/src/main/res/layout/activity_tooltip.xml
@@ -20,7 +20,7 @@
android:gravity="center_horizontal"
android:text="Don't get it?"
app:tooltipColor="#66009900"
- app:anchoredView="@id/header_1" />
+ app:arrowLocation="3"/>
+ app:arrowHeight="40dp"
+ app:arrowAlignment="center"/>
+ app:arrowWidth="10dp"
+ app:arrowHeight="10dp"
+ app:arrowLocation="1"/>
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index dbdaf69..2082840 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,6 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.4-all.zip
+
+
diff --git a/library/build.gradle b/library/build.gradle
index f5e4e49..4088664 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -4,7 +4,7 @@ apply plugin: 'com.android.library'
android {
compileSdkVersion 22
- buildToolsVersion "22.0.1"
+ buildToolsVersion "25.0.3"
defaultConfig {
minSdkVersion 14
@@ -29,4 +29,5 @@ android.libraryVariants.all { variant ->
}
}
-apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
\ No newline at end of file
+apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
+
diff --git a/library/src/main/java/com/venmo/view/ArrowAlignmentHelper.java b/library/src/main/java/com/venmo/view/ArrowAlignmentHelper.java
index 3068577..5389b40 100644
--- a/library/src/main/java/com/venmo/view/ArrowAlignmentHelper.java
+++ b/library/src/main/java/com/venmo/view/ArrowAlignmentHelper.java
@@ -5,31 +5,37 @@
public final class ArrowAlignmentHelper {
- public static float calculateArrowMidPoint(TooltipView view, RectF rectF) {
+ public static float calculateArrowMidPoint(TooltipView view, RectF rectF, boolean isHorizontal) {
int offset = view.getAlignmentOffset();
float middle = 0f;
+ float length = isHorizontal ? rectF.width() : rectF.height();
switch (view.getArrowAlignment()) {
case START:
- middle = offset == 0 ? rectF.width() / 4 : offset;
+ middle = offset == 0 ? length / 4 : offset;
break;
case CENTER:
- middle = rectF.width() / 2;
+ middle = length / 2;
if (offset > 0)
throw new IllegalArgumentException(
"Offsets are not support when the tooltip arrow is anchored in the middle of the view.");
break;
case END:
- middle = rectF.width();
- middle -= (offset == 0 ? rectF.width() / 4 : offset);
+ middle = length;
+ middle -= (offset == 0 ? length / 4 : offset);
break;
case ANCHORED_VIEW:
- middle = rectF.width() / 2;
+ middle = length / 2;
if (view.getAnchoredViewId() != View.NO_ID) {
View anchoredView = ((View) view.getParent())
.findViewById(view.getAnchoredViewId());
- middle += anchoredView.getX() + anchoredView.getWidth() / 2 - view.getX()
- - view.getWidth() / 2;
+ if (isHorizontal) {
+ middle += anchoredView.getX() + anchoredView.getWidth() / 2 - view.getX()
+ - view.getWidth() / 2;
+ } else {
+ middle += anchoredView.getY() + anchoredView.getHeight() / 2 - view.getY()
+ - view.getHeight() / 2;
+ }
}
break;
}
diff --git a/library/src/main/java/com/venmo/view/BottomArrowLocation.java b/library/src/main/java/com/venmo/view/BottomArrowLocation.java
index 6b89756..7521831 100644
--- a/library/src/main/java/com/venmo/view/BottomArrowLocation.java
+++ b/library/src/main/java/com/venmo/view/BottomArrowLocation.java
@@ -4,7 +4,6 @@
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
-import android.view.View;
import static android.graphics.Path.Direction;
@@ -18,7 +17,7 @@ public void configureDraw(TooltipView view, Canvas canvas) {
view.getTooltipPath()
.addRoundRect(rectF, view.getCornerRadius(), view.getCornerRadius(), Direction.CW);
- float middle = ArrowAlignmentHelper.calculateArrowMidPoint(view, rectF);
+ float middle = ArrowAlignmentHelper.calculateArrowMidPoint(view, rectF,true);
view.getTooltipPath().moveTo(middle, view.getHeight());
int arrowDx = view.getArrowWidth() / 2;
diff --git a/library/src/main/java/com/venmo/view/LeftArrowLocation.java b/library/src/main/java/com/venmo/view/LeftArrowLocation.java
new file mode 100644
index 0000000..d1743ce
--- /dev/null
+++ b/library/src/main/java/com/venmo/view/LeftArrowLocation.java
@@ -0,0 +1,37 @@
+package com.venmo.view;
+
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.RectF;
+
+import static android.graphics.Path.Direction;
+
+class LeftArrowLocation implements ArrowLocation {
+
+ @Override
+ public void configureDraw(TooltipView view, Canvas canvas) {
+ Path tooltipPath = new Path();
+ view.setTooltipPath(tooltipPath);
+ RectF rectF = new RectF(canvas.getClipBounds());
+ rectF.left += view.getArrowHeight();
+
+ rectF.top += 1;
+ rectF.bottom -= 1;
+ rectF.left += 1;
+ rectF.right -= 1;
+
+ tooltipPath.addRoundRect(rectF, view.getCornerRadius(), view.getCornerRadius(), Direction.CW);
+
+ float middle = ArrowAlignmentHelper.calculateArrowMidPoint(view, rectF, false);
+ tooltipPath.moveTo(0f, middle);
+ int arrowDy = view.getArrowWidth() / 2;
+ tooltipPath.lineTo(rectF.left, middle - arrowDy);
+ tooltipPath.lineTo(rectF.left, middle + arrowDy);
+ tooltipPath.close();
+
+ Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ paint.setColor(view.getTooltipColor());
+ view.setPaint(paint);
+ }
+}
diff --git a/library/src/main/java/com/venmo/view/RightArrowLocation.java b/library/src/main/java/com/venmo/view/RightArrowLocation.java
new file mode 100644
index 0000000..6ef92c5
--- /dev/null
+++ b/library/src/main/java/com/venmo/view/RightArrowLocation.java
@@ -0,0 +1,37 @@
+package com.venmo.view;
+
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.RectF;
+
+import static android.graphics.Path.Direction;
+
+class RightArrowLocation implements ArrowLocation {
+
+ @Override
+ public void configureDraw(TooltipView view, Canvas canvas) {
+ Path tooltipPath = new Path();
+ view.setTooltipPath(tooltipPath);
+ RectF rectF = new RectF(canvas.getClipBounds());
+ rectF.right -= view.getArrowHeight();
+
+ rectF.top += 1;
+ rectF.bottom -= 1;
+ rectF.left += 1;
+ rectF.right -= 1;
+
+ tooltipPath.addRoundRect(rectF, view.getCornerRadius(), view.getCornerRadius(), Direction.CW);
+
+ float middle = ArrowAlignmentHelper.calculateArrowMidPoint(view, rectF, false);
+ tooltipPath.moveTo(view.getWidth(), middle);
+ int arrowDy = view.getArrowWidth() / 2;
+ tooltipPath.lineTo(rectF.right, middle - arrowDy);
+ tooltipPath.lineTo(rectF.right, middle + arrowDy);
+ tooltipPath.close();
+
+ Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ paint.setColor(view.getTooltipColor());
+ view.setPaint(paint);
+ }
+}
diff --git a/library/src/main/java/com/venmo/view/TooltipView.java b/library/src/main/java/com/venmo/view/TooltipView.java
index 506dfe2..d13d368 100644
--- a/library/src/main/java/com/venmo/view/TooltipView.java
+++ b/library/src/main/java/com/venmo/view/TooltipView.java
@@ -22,14 +22,19 @@ public class TooltipView extends TextView {
private int arrowHeight;
private int arrowWidth;
private int cornerRadius;
- private @IdRes int anchoredViewId;
- private @ColorRes int tooltipColor;
+ private
+ @IdRes
+ int anchoredViewId;
+ private
+ @ColorRes
+ int tooltipColor;
private ArrowLocation arrowLocation;
private ArrowAlignment arrowAlignment;
private int alignmentOffset;
private int arrowPositioning;
private Paint paint;
private Path tooltipPath;
+ public static final int LEFT = 1, TOP = 2, RIGHT = 3, BOTTOM = 4;
public TooltipView(Context context) {
super(context);
@@ -61,8 +66,20 @@ private void init(AttributeSet attrs, int defStyle) {
R.dimen.tooltip_default_arrow_width);
arrowPositioning = a.getInteger(R.styleable.TooltipView_arrowLocation,
res.getInteger(R.integer.tooltip_default_arrow_location));
- arrowLocation = arrowPositioning == 0 ? new TopArrowLocation()
- : new BottomArrowLocation();
+ switch (arrowPositioning) {
+ case LEFT:
+ arrowLocation = new LeftArrowLocation();
+ break;
+ case TOP:
+ arrowLocation = new TopArrowLocation();
+ break;
+ case RIGHT:
+ arrowLocation = new RightArrowLocation();
+ break;
+ case BOTTOM:
+ arrowLocation = new BottomArrowLocation();
+ break;
+ }
arrowAlignment = ArrowAlignment.getAlignment(
a.getInteger(R.styleable.TooltipView_arrowAlignment, res.getInteger(
R.integer.tooltip_default_arrow_alignment)));
@@ -76,7 +93,18 @@ private void init(AttributeSet attrs, int defStyle) {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- setMeasuredDimension(getMeasuredWidth(), getMeasuredHeight() + arrowHeight);
+ int widthOffset = 0, heightOffset = 0;
+ switch (arrowPositioning) {
+ case TOP:
+ case BOTTOM:
+ heightOffset = arrowHeight;
+ break;
+ case LEFT:
+ case RIGHT:
+ widthOffset = arrowHeight;
+ break;
+ }
+ setMeasuredDimension(getMeasuredWidth()+widthOffset, getMeasuredHeight() + heightOffset);
}
@Override
@@ -200,7 +228,7 @@ public void setAlignmentOffsetResource(@DimenRes int resId) {
}
private int getDimension(TypedArray a, @StyleableRes int styleableId,
- @DimenRes int defaultDimension) {
+ @DimenRes int defaultDimension) {
int result = a.getDimensionPixelSize(styleableId, NOT_PRESENT);
if (result == NOT_PRESENT) {
result = getResources().getDimensionPixelSize(defaultDimension);
diff --git a/library/src/main/java/com/venmo/view/TopArrowLocation.java b/library/src/main/java/com/venmo/view/TopArrowLocation.java
index 7e07e82..ba7f01a 100644
--- a/library/src/main/java/com/venmo/view/TopArrowLocation.java
+++ b/library/src/main/java/com/venmo/view/TopArrowLocation.java
@@ -4,7 +4,6 @@
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
-import android.view.View;
import static android.graphics.Path.Direction;
@@ -12,20 +11,21 @@ class TopArrowLocation implements ArrowLocation {
@Override
public void configureDraw(TooltipView view, Canvas canvas) {
- view.setTooltipPath(new Path());
+ Path tooltipPath = new Path();
+ view.setTooltipPath(tooltipPath);
RectF rectF = new RectF(canvas.getClipBounds());
rectF.top += view.getArrowHeight();
- view.getTooltipPath().addRoundRect(rectF, view.getCornerRadius(), view.getCornerRadius(),
+ tooltipPath.addRoundRect(rectF, view.getCornerRadius(), view.getCornerRadius(),
Direction.CW);
- float middle = ArrowAlignmentHelper.calculateArrowMidPoint(view, rectF);
+ float middle = ArrowAlignmentHelper.calculateArrowMidPoint(view, rectF,true);
- view.getTooltipPath().moveTo(middle, 0f);
+ tooltipPath.moveTo(middle, 0f);
int arrowDx = view.getArrowWidth() / 2;
- view.getTooltipPath().lineTo(middle - arrowDx, rectF.top);
- view.getTooltipPath().lineTo(middle + arrowDx, rectF.top);
- view.getTooltipPath().close();
+ tooltipPath.lineTo(middle - arrowDx, rectF.top);
+ tooltipPath.lineTo(middle + arrowDx, rectF.top);
+ tooltipPath.close();
view.setPaint(new Paint(Paint.ANTI_ALIAS_FLAG));
view.getTooltipPaint().setColor(view.getTooltipColor());
diff --git a/library/src/main/res/values/dimens.xml b/library/src/main/res/values/dimens.xml
index 899ba52..7d2536a 100644
--- a/library/src/main/res/values/dimens.xml
+++ b/library/src/main/res/values/dimens.xml
@@ -3,6 +3,6 @@
16dp
4dp
0dp
- 1
+ 2
3
\ No newline at end of file