diff --git a/.github/ISSUE_TEMPLATE/issue_template_bug.md b/.github/ISSUE_TEMPLATE/issue_template_bug.md
index feeca7b..32023d1 100644
--- a/.github/ISSUE_TEMPLATE/issue_template_bug.md
+++ b/.github/ISSUE_TEMPLATE/issue_template_bug.md
@@ -8,31 +8,31 @@ assignees: getActivity
## 问题描述
-* 框架版本:XXX
+* 框架版本【必填】:XXX
-* 问题描述:XXX
+* 问题描述【必填】:XXX
-* 复现步骤:XXX
+* 复现步骤【必填】:XXX
-* 是否必现:填是/否
+* 是否必现【必填】:填是/否
-* 出现问题的手机信息:请填写出现问题的品牌和机型
+* 出现问题的手机信息【必填】:请填写出现问题的品牌和机型
-* 出现问题的安卓版本:请填写出现问题的 Android 版本
+* 出现问题的安卓版本【必填】:请填写出现问题的 Android 版本
## 请回答
-* 是部分机型还是所有机型都会出现:部分/全部(例如:某为,某 Android 版本会出现)
+* 是部分机型还是所有机型都会出现【必答】:部分/全部(例如:某为,某 Android 版本会出现)
-* 框架最新的版本是否存在这个问题:是/否(如果用的是旧版本的话,建议升级看问题是否还存在)
+* 框架最新的版本是否存在这个问题【必答】:是/否(如果用的是旧版本的话,建议升级看问题是否还存在)
-* 是否已经查阅框架文档还未能解决的:是/否(文档会提供最常见的问题解答,可以看看是否有自己想要的)
+* 是否已经查阅框架文档还未能解决的【必答】:是/否(文档会提供最常见的问题解答,可以看看是否有自己想要的)
-* issue 是否有人曾提过类似的问题:是/否(看看曾经有人提过类似的问题,先参考一下别人是怎么解决的)
+* issue 是否有人曾提过类似的问题【必答】:是/否(看看曾经有人提过类似的问题,先参考一下别人是怎么解决的)
-* 是否可以通过 Demo 来复现该问题:是/否(排查一下是不是自己的项目代码写得有问题导致的)
+* 是否可以通过 Demo 来复现该问题【必答】:是/否(排查一下是不是自己的项目代码写得有问题导致的)
-* 使用原生的 shape.xml 来实现是否也会出现该问题:是/否(排查一下是不是框架的代码存在问题导致的)
+* 使用原生的 shape.xml 来实现是否也会出现该问题【必答】:是/否(排查一下是不是框架的代码存在问题导致的)
## 其他
diff --git a/.github/ISSUE_TEMPLATE/issue_template_suggest.md b/.github/ISSUE_TEMPLATE/issue_template_suggest.md
index 9c343fc..4901b6a 100644
--- a/.github/ISSUE_TEMPLATE/issue_template_suggest.md
+++ b/.github/ISSUE_TEMPLATE/issue_template_suggest.md
@@ -8,8 +8,8 @@ assignees: getActivity
## 建议收集
-* issue 是否有人曾提过类似的问题?(必答项,一旦出现重复提问我将不会再次解答)
+* issue 是否有人曾提过类似的问题?【必答】(一旦出现重复提问我将不会再次解答)
-* 你觉得框架有什么不足之处?(必答项,你可以描述框架有什么令你不满意的地方)
+* 你觉得框架有什么不足之处?【必答】(你可以描述框架有什么令你不满意的地方)
-* 你觉得该怎么去完善会比较好?(非必答项,你可以提供一下自己的想法或者做法供作者参考)
\ No newline at end of file
+* 你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考)
\ No newline at end of file
diff --git a/HelpDoc.md b/HelpDoc.md
index 8328983..9b2249e 100644
--- a/HelpDoc.md
+++ b/HelpDoc.md
@@ -1,14 +1,22 @@
## 常见疑问解答
+#### 为什么我调用 setXxx 没有生效?
+
+* 如果设置的是 Shape、阴影、背景状态选择器的属性,需要调用 `intoBackground` 方法才能生效
+
+* 如果设置的是文字颜色及状态选择器的属性,需要调用 `intoTextColor` 方法才能生效
+
+* 如果设置的是 **CheckBox**、**RadioButton** 选中框的图标及状态选择器的属性,需要调用 `intoButtonDrawable` 方法才能生效
+
#### 框架入侵性太大怎么办?
-* 框架上线有很多人说框架的侵入性很强?这点我必须承认,我也有看到网上也有用 `LayoutInflater.Factory` 来实现,这样入侵性很低,但是有一个致命的缺点,无法在布局中预览,这样你是不是突然就感觉不香了?入侵强当然有缺点也有优点,我不能光看它坏的一面,那样看待问题就太片面了,不过它的缺点并不是致命的,就好比你使用了一个自定义 View 叫 `XxxTextView`,这种情况下你肯定就没办法再使用 **ShapeTextView** 了,那么这种情况我们该这么办?解决方式大致分为两种:
+* 框架上线有很多人说框架的侵入性很强?这点我必须承认,我也有看到网上也有用 `LayoutInflater.Factory` 或者 DataBinding 来实现,这样的入侵性低,但是有一个致命的缺点,无法在布局中预览,这样你是不是突然就感觉不香了?入侵强当然有缺点也有优点,我不能光看它坏的一面,那样看待问题就太片面了,不过它的缺点并不是致命的,就好比你使用了一个自定义 View 叫 `XxxTextView`,这种情况下你肯定就没办法再使用 **ShapeTextView** 了,那么这种情况我们该这么办?解决方式大致分为两种:
- * 第一种可以用原生的 Shape 来实现,可以选择在 xml 定义或者代码动态设置的方式,这种方式大家应该都懂,这里不再多说,不过有一个问题,就是原生的 Shape 是不支持设置阴影的,如果你想要用阴影的话,就得用第二种方式。
+ * 第一种可以用原生的 Shape 来实现,可以选择在 xml 定义或者代码动态设置的方式,这种方式大家应该都懂,这里不再多说,不过有一个问题,就是原生的 Shape 是不支持设置阴影的,如果你想要用阴影的话,就得用第二种方式。
- * 第二种就是用框架提供的 **ShapeDrawable** 类了,在 Java 代码中进行动态设置,这个类的用法其实很简单,在布局用哪个属性,在代码中就用哪个方法。
+ * 第二种就是用框架提供的 **ShapeDrawable** 类了,在 Java 代码中进行动态设置,这个类的用法其实很简单,在布局用哪个属性,在代码中就用哪个方法。
- * 另外有一个需要注意的点,如果你自己单独使用 **GradientDrawable** 还是 **ShapeDrawable** 在 Java 代码动态设置的话,如果涉及到虚线或者阴影的话,经过验证在有些手机上面是无法生效的,必须要先关闭硬件加速才能生效,当然 **ShapeDrawable** 有对外开放 **intoBackground** 方法,这个方法会帮你判断是否需要关闭硬件加速。
+ * 另外有一个需要注意的点,如果你自己单独使用 **GradientDrawable** 还是 **ShapeDrawable** 在 Java 代码动态设置的话,如果涉及到虚线或者阴影的话,经过验证在有些手机上面是无法生效的,必须要先关闭硬件加速才能生效,当然 **ShapeDrawable** 有对外开放 **intoBackground** 方法,这个方法会帮你判断是否需要关闭硬件加速。
* 现在目前关于 Shape 的框架都无法十全十美,看个人怎么抉择了,无关好与坏,在享受框架优点的同时,也要学会忍受框架的缺点。
diff --git a/README.md b/README.md
index 9aea93f..16eb64d 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
* 博客介绍:[震惊,没想到 Shape 也可以这么写](https://www.jianshu.com/p/1288d8873440)
-* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](ShapeView.apk)
+* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/ShapeView/releases/download/8.2/ShapeView.apk)
![](picture/demo_code.png)
@@ -47,7 +47,7 @@ android {
dependencies {
// Shape 框架:https://github.com/getActivity/ShapeView
- implementation 'com.github.getActivity:ShapeView:8.0'
+ implementation 'com.github.getActivity:ShapeView:8.2'
}
```
@@ -75,12 +75,12 @@ shapeButton.setOnClickListener(new View.OnClickListener() {
shapeButton.getShapeDrawableBuilder()
.setSolidColor(0xFF000000)
.setStrokeColor(0xFF5A8DDF)
- // 最后需要调用一下 into 方法才能生效
+ // 注意:最后需要调用一下 intoBackground 方法才能生效
.intoBackground();
shapeButton.getTextColorBuilder()
.setTextColor(0xFFFFFFFF)
- // 最后需要调用一下 into 方法才能生效
+ // 注意:最后需要调用一下 intoTextColor 方法才能生效
.intoTextColor();
shapeButton.setText("颜色已经改变啦");
@@ -93,162 +93,173 @@ shapeButton.setOnClickListener(new View.OnClickListener() {
```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
```
diff --git a/ShapeView.apk b/ShapeView.apk
deleted file mode 100644
index bbbaf6b..0000000
Binary files a/ShapeView.apk and /dev/null differ
diff --git a/app/build.gradle b/app/build.gradle
index 13581f8..4437127 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,8 +8,8 @@ android {
minSdkVersion 16
// noinspection ExpiredTargetSdkVersion
targetSdkVersion 28
- versionCode 80
- versionName "8.0"
+ versionCode 82
+ versionName "8.2"
}
// 支持 Java JDK 8
@@ -60,7 +60,7 @@ dependencies {
implementation 'com.android.support:design:28.0.0'
// 标题栏框架:https://github.com/getActivity/TitleBar
- implementation 'com.github.getActivity:TitleBar:9.3'
+ implementation 'com.github.getActivity:TitleBar:9.5'
// 内存泄漏检测:https://github.com/square/leakcanary
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8.1'
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index b5563a3..6121a05 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -254,8 +254,8 @@
app:shape="rectangle"
app:shape_radius="10dp"
app:shape_shadowColor="#50000000"
- app:shape_shadowOffsetX="5dp"
- app:shape_shadowOffsetY="5dp"
+ app:shape_shadowOffsetX="8dp"
+ app:shape_shadowOffsetY="8dp"
app:shape_shadowSize="10dp"
app:shape_solidColor="#FFFFFF" />
@@ -273,8 +273,8 @@
app:shape="rectangle"
app:shape_radius="10dp"
app:shape_shadowColor="#50000000"
- app:shape_shadowOffsetX="-5dp"
- app:shape_shadowOffsetY="-5dp"
+ app:shape_shadowOffsetX="-8dp"
+ app:shape_shadowOffsetY="-8dp"
app:shape_shadowSize="10dp"
app:shape_solidColor="#FFFFFF" />
@@ -293,8 +293,8 @@
app:shape_bottomLeftRadius="15dp"
app:shape_bottomRightRadius="20dp"
app:shape_shadowColor="#50000000"
- app:shape_shadowOffsetX="-5dp"
- app:shape_shadowOffsetY="-5dp"
+ app:shape_shadowOffsetX="-8dp"
+ app:shape_shadowOffsetY="-8dp"
app:shape_shadowSize="10dp"
app:shape_solidColor="#FFFFFF"
app:shape_topLeftRadius="5dp"
@@ -314,7 +314,6 @@
app:shape_radius="10dp"
app:shape_shadowColor="#FF0000"
app:shape_shadowSize="10dp"
- app:shape_solidColor="#FFFFFF"
app:shape_strokeColor="#000000"
app:shape_strokeWidth="1dp" />
@@ -371,11 +370,13 @@
app:shape_textStartColor="#49DAFA" />
+
+
+
+
diff --git a/library/build.gradle b/library/build.gradle
index 4de1869..242e6e6 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -5,8 +5,8 @@ android {
defaultConfig {
minSdkVersion 16
- versionCode 80
- versionName "8.0"
+ versionCode 82
+ versionName "8.2"
}
// 支持 Java JDK 8
diff --git a/library/src/main/java/com/hjq/shape/builder/ShapeDrawableBuilder.java b/library/src/main/java/com/hjq/shape/builder/ShapeDrawableBuilder.java
index 0fef416..09c1c27 100644
--- a/library/src/main/java/com/hjq/shape/builder/ShapeDrawableBuilder.java
+++ b/library/src/main/java/com/hjq/shape/builder/ShapeDrawableBuilder.java
@@ -5,12 +5,13 @@
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.view.Gravity;
import android.view.View;
+import com.hjq.shape.drawable.ExtendStateListDrawable;
import com.hjq.shape.drawable.ShapeDrawable;
import com.hjq.shape.drawable.ShapeGradientType;
import com.hjq.shape.drawable.ShapeType;
-import com.hjq.shape.drawable.ExtendStateListDrawable;
import com.hjq.shape.styleable.IShapeDrawableStyleable;
/**
@@ -61,15 +62,17 @@ public final class ShapeDrawableBuilder {
private int mDashWidth;
private int mDashGap;
+ private int mShadowSize;
+ private int mShadowColor;
+ private int mShadowOffsetX;
+ private int mShadowOffsetY;
+
private int mInnerRadius;
private float mInnerRadiusRatio;
private int mThickness;
private float mThicknessRatio;
- private int mShadowSize;
- private int mShadowColor;
- private int mShadowOffsetX;
- private int mShadowOffsetY;
+ private int mLineGravity;
public ShapeDrawableBuilder(View view, TypedArray typedArray, IShapeDrawableStyleable styleable) {
mView = view;
@@ -150,15 +153,17 @@ public ShapeDrawableBuilder(View view, TypedArray typedArray, IShapeDrawableStyl
mDashWidth = typedArray.getDimensionPixelSize(styleable.getDashWidthStyleable(), 0);
mDashGap = typedArray.getDimensionPixelSize(styleable.getDashGapStyleable(), 0);
+ mShadowSize = typedArray.getDimensionPixelSize(styleable.getShadowSizeStyleable(), 0);
+ mShadowColor = typedArray.getColor(styleable.getShadowColorStyleable(), 0x10000000);
+ mShadowOffsetX = typedArray.getDimensionPixelOffset(styleable.getShadowOffsetXStyleable(), 0);
+ mShadowOffsetY = typedArray.getDimensionPixelOffset(styleable.getShadowOffsetYStyleable(), 0);
+
mInnerRadius = typedArray.getDimensionPixelOffset(styleable.getInnerRadiusStyleable(), -1);
mInnerRadiusRatio = typedArray.getFloat(styleable.getInnerRadiusRatioStyleable(), 3.0f);
mThickness = typedArray.getDimensionPixelOffset(styleable.getThicknessStyleable(), -1);
mThicknessRatio = typedArray.getFloat(styleable.getThicknessRatioStyleable(), 9.0f);
- mShadowSize = typedArray.getDimensionPixelSize(styleable.getShadowSizeStyleable(), 0);
- mShadowColor = typedArray.getColor(styleable.getShadowColorStyleable(), 0x10000000);
- mShadowOffsetX = typedArray.getDimensionPixelOffset(styleable.getShadowOffsetXStyleable(), 0);
- mShadowOffsetY = typedArray.getDimensionPixelOffset(styleable.getShadowOffsetYStyleable(), 0);
+ mLineGravity = typedArray.getInt(styleable.getLineGravityStyleable(), Gravity.CENTER);
}
public ShapeDrawableBuilder setShape(int shape) {
@@ -649,15 +654,17 @@ public void refreshShapeDrawable(ShapeDrawable drawable,
.setGradientRadius(mGradientRadius)
.setGradientCenter(mCenterX, mCenterY);
+ drawable.setShadowSize(mShadowSize)
+ .setShadowColor(mShadowColor)
+ .setShadowOffsetX(mShadowOffsetX)
+ .setShadowOffsetY(mShadowOffsetY);
+
drawable.setInnerRadiusRatio(mInnerRadiusRatio)
.setInnerRadius(mInnerRadius)
.setThicknessRatio(mThicknessRatio)
.setThickness(mThickness);
- drawable.setShadowSize(mShadowSize)
- .setShadowColor(mShadowColor)
- .setShadowOffsetX(mShadowOffsetX)
- .setShadowOffsetY(mShadowOffsetY);
+ drawable.setLineGravity(mLineGravity);
// 填充色设置
if (solidStateColor != null) {
diff --git a/library/src/main/java/com/hjq/shape/builder/TextColorBuilder.java b/library/src/main/java/com/hjq/shape/builder/TextColorBuilder.java
index ae87101..8bdc8c7 100644
--- a/library/src/main/java/com/hjq/shape/builder/TextColorBuilder.java
+++ b/library/src/main/java/com/hjq/shape/builder/TextColorBuilder.java
@@ -4,7 +4,7 @@
import android.content.res.TypedArray;
import android.graphics.Color;
import android.support.annotation.Nullable;
-import android.text.SpannableStringBuilder;
+import android.text.SpannableString;
import android.text.Spanned;
import android.widget.TextView;
@@ -80,7 +80,6 @@ public TextColorBuilder(TextView textView, TypedArray typedArray, ITextColorStyl
public TextColorBuilder setTextColor(int color) {
mTextColor = color;
- clearTextGradientColors();
return this;
}
@@ -160,10 +159,6 @@ public boolean isTextGradientColors() {
return mTextGradientColors != null && mTextGradientColors.length > 0;
}
- public void clearTextGradientColors() {
- mTextGradientColors = null;
- }
-
public TextColorBuilder setTextGradientOrientation(int orientation) {
mTextGradientOrientation = orientation;
return this;
@@ -195,13 +190,17 @@ public boolean isTextStrokeColor() {
return mTextStrokeColor != Color.TRANSPARENT && mTextStrokeSize > 0;
}
- public void clearTextStrokeColor() {
+ public void clearTextSpannable() {
mTextStrokeColor = Color.TRANSPARENT;
mTextStrokeSize = 0;
+ if (!isTextGradientColors()) {
+ mTextView.setTextColor(mTextColor);
+ }
+ mTextView.setText(mTextView.getText().toString());
}
- public SpannableStringBuilder buildTextSpannable(CharSequence text) {
- SpannableStringBuilder builder = new SpannableStringBuilder(text);
+ public SpannableString buildTextSpannable(CharSequence text) {
+ SpannableString builder = new SpannableString(text);
LinearGradientFontSpan linearGradientFontSpan = null;
StrokeFontSpan strokeFontSpan = null;
@@ -289,10 +288,9 @@ public ColorStateList buildColorState() {
}
public void intoTextColor() {
+ mTextView.setTextColor(buildColorState());
if (isTextGradientColors() || isTextStrokeColor()) {
mTextView.setText(buildTextSpannable(mTextView.getText()));
- return;
}
- mTextView.setTextColor(buildColorState());
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/drawable/ShapeDrawable.java b/library/src/main/java/com/hjq/shape/drawable/ShapeDrawable.java
index 389d425..aa9c970 100644
--- a/library/src/main/java/com/hjq/shape/drawable/ShapeDrawable.java
+++ b/library/src/main/java/com/hjq/shape/drawable/ShapeDrawable.java
@@ -1,6 +1,7 @@
package com.hjq.shape.drawable;
import android.annotation.SuppressLint;
+import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
@@ -18,6 +19,7 @@
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.graphics.ColorUtils;
+import android.view.Gravity;
import android.view.View;
/**
@@ -50,6 +52,9 @@ public class ShapeDrawable extends Drawable {
private Path mRingPath;
private boolean mPathIsDirty = true;
+ /** 布局方向 */
+ private int mLayoutDirection;
+
public ShapeDrawable() {
this(new ShapeState());
}
@@ -309,81 +314,91 @@ public ShapeDrawable setGradientOrientation(ShapeGradientOrientation orientation
}
/**
- * 设置内环的半径
+ * 设置阴影颜色
*/
- public ShapeDrawable setInnerRadius(int radius) {
- mShapeState.mInnerRadius = radius;
- mRectIsDirty = true;
+ public ShapeDrawable setShadowColor(int color) {
+ mShapeState.setShadowColor(color);
+ mPathIsDirty = true;
invalidateSelf();
return this;
}
/**
- * 设置内环的半径比率
+ * 设置阴影大小
*/
- public ShapeDrawable setInnerRadiusRatio(float radiusRatio) {
- mShapeState.mInnerRadiusRatio = radiusRatio;
- mRectIsDirty = true;
+ public ShapeDrawable setShadowSize(int size) {
+ mShapeState.setShadowSize(size);
+ mPathIsDirty = true;
invalidateSelf();
return this;
}
/**
- * 设置外环的厚度
+ * 设置阴影水平偏移
*/
- public ShapeDrawable setThickness(int size) {
- mShapeState.mThickness = size;
- mRectIsDirty = true;
+ public ShapeDrawable setShadowOffsetX(int offsetX) {
+ mShapeState.setShadowOffsetX(offsetX);
+ mPathIsDirty = true;
invalidateSelf();
return this;
}
/**
- * 设置外环的厚度比率
+ * 阴影垂直偏移
*/
- public ShapeDrawable setThicknessRatio(float radiusRatio) {
- mShapeState.mThicknessRatio = radiusRatio;
+ public ShapeDrawable setShadowOffsetY(int offsetY) {
+ mShapeState.setShadowOffsetY(offsetY);
+ mPathIsDirty = true;
+ invalidateSelf();
+ return this;
+ }
+
+ /**
+ * 设置内环的半径
+ */
+ public ShapeDrawable setInnerRadius(int radius) {
+ mShapeState.mInnerRadius = radius;
mRectIsDirty = true;
invalidateSelf();
return this;
}
/**
- * 设置阴影颜色
+ * 设置内环的半径比率
*/
- public ShapeDrawable setShadowColor(int color) {
- mShapeState.setShadowColor(color);
- mPathIsDirty = true;
+ public ShapeDrawable setInnerRadiusRatio(float radiusRatio) {
+ mShapeState.mInnerRadiusRatio = radiusRatio;
+ mRectIsDirty = true;
invalidateSelf();
return this;
}
/**
- * 设置阴影大小
+ * 设置外环的厚度
*/
- public ShapeDrawable setShadowSize(int size) {
- mShapeState.setShadowSize(size);
- mPathIsDirty = true;
+ public ShapeDrawable setThickness(int size) {
+ mShapeState.mThickness = size;
+ mRectIsDirty = true;
invalidateSelf();
return this;
}
/**
- * 设置阴影水平偏移
+ * 设置外环的厚度比率
*/
- public ShapeDrawable setShadowOffsetX(int offsetX) {
- mShapeState.setShadowOffsetX(offsetX);
- mPathIsDirty = true;
+ public ShapeDrawable setThicknessRatio(float radiusRatio) {
+ mShapeState.mThicknessRatio = radiusRatio;
+ mRectIsDirty = true;
invalidateSelf();
return this;
}
/**
- * 阴影垂直偏移
+ * 设置线条重心
*/
- public ShapeDrawable setShadowOffsetY(int offsetY) {
- mShapeState.setShadowOffsetY(offsetY);
- mPathIsDirty = true;
+ public ShapeDrawable setLineGravity(int lineGravity) {
+ mShapeState.mLineGravity = lineGravity;
+ mRectIsDirty = true;
invalidateSelf();
return this;
}
@@ -397,6 +412,12 @@ public void intoBackground(View view) {
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
view.setBackground(this);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ mLayoutDirection = view.getLayoutDirection();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ setLayoutDirection(mLayoutDirection);
+ }
+ }
}
@SuppressLint("WrongConstant")
@@ -494,21 +515,8 @@ of the fill (if any) without worrying about blending artifacts.
shadowColor = ColorUtils.setAlphaComponent(mShapeState.mShadowColor, 254);
}
- float shadowOffsetX = 0;
- if (mShapeState.mShadowOffsetX > 0) {
- shadowOffsetX = mShapeState.mShadowOffsetX;
- }
-
- float shadowOffsetY = 0;
- if (mShapeState.mShadowOffsetY > 0) {
- shadowOffsetY = mShapeState.mShadowOffsetY;
- }
-
- mShadowPaint.setShadowLayer(mShapeState.mShadowSize, shadowOffsetX, shadowOffsetY, shadowColor);
-
- // 这种方式也可以实现阴影效果
- // mShadowPaint.setColor(shadowColor);
- // mShadowPaint.setMaskFilter(new BlurMaskFilter(mShapeState.mShadowSize, BlurMaskFilter.Blur.NORMAL));
+ mShadowPaint.setColor(shadowColor);
+ mShadowPaint.setMaskFilter(new BlurMaskFilter(mShapeState.mShadowSize, BlurMaskFilter.Blur.NORMAL));
} else {
if (mShadowPaint != null) {
@@ -575,11 +583,58 @@ of the fill (if any) without worrying about blending artifacts.
break;
case ShapeType.LINE: {
RectF r = mRect;
- float y = r.centerY();
+ float startX;
+ float startY;
+ float stopX;
+ float stopY;
+ int lineGravity;
+ Callback callback = getCallback();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && callback instanceof View) {
+ int layoutDirection = ((View) callback).getContext().getResources().getConfiguration().getLayoutDirection();
+ lineGravity = Gravity.getAbsoluteGravity(st.mLineGravity, layoutDirection);
+ } else {
+ lineGravity = st.mLineGravity;
+ }
+
+ switch (lineGravity) {
+ case Gravity.LEFT:
+ startX = 0;
+ startY = 0;
+ stopX = 0;
+ stopY = r.bottom;
+ break;
+ case Gravity.RIGHT:
+ startX = r.right;
+ startY = 0;
+ stopX = r.right;
+ stopY = r.bottom;
+ break;
+ case Gravity.TOP:
+ startX = 0;
+ startY = 0;
+ stopX = r.right;
+ stopY = 0;
+ break;
+ case Gravity.BOTTOM:
+ startX = 0;
+ startY = r.bottom;
+ stopX = r.right;
+ stopY = r.bottom;
+ break;
+ case Gravity.CENTER:
+ default:
+ float y = r.centerY();
+ startX = r.left;
+ startY = y;
+ stopX = r.right;
+ stopY = y;
+ break;
+ }
+
if (haveShadow) {
- canvas.drawLine(r.left, y, r.right, y, mShadowPaint);
+ canvas.drawLine(startX, startY, stopX, stopY, mShadowPaint);
}
- canvas.drawLine(r.left, y, r.right, y, mStrokePaint);
+ canvas.drawLine(startX, startY, stopX, stopY, mStrokePaint);
break;
}
case ShapeType.RING:
@@ -606,6 +661,11 @@ of the fill (if any) without worrying about blending artifacts.
}
}
+ @Override
+ public boolean onLayoutDirectionChanged(int layoutDirection) {
+ return mShapeState.mShapeType == ShapeType.LINE;
+ }
+
private int modulateAlpha(int alpha) {
int scale = mAlpha + (mAlpha >> 7);
return alpha * scale >> 8;
@@ -736,10 +796,12 @@ private boolean ensureValidRect() {
final ShapeState st = mShapeState;
- float let = bounds.left + inset + mShapeState.mShadowSize * 1.2f;
- float top = bounds.top + inset + mShapeState.mShadowSize * 1.2f;
- float right = bounds.right - inset - mShapeState.mShadowSize * 1.2f;
- float bottom = bounds.bottom - inset - mShapeState.mShadowSize * 1.2f;
+ float shadowScale = 1.2f;
+
+ float let = bounds.left + inset + mShapeState.mShadowSize * shadowScale;
+ float top = bounds.top + inset + mShapeState.mShadowSize * shadowScale;
+ float right = bounds.right - inset - mShapeState.mShadowSize * shadowScale;
+ float bottom = bounds.bottom - inset - mShapeState.mShadowSize * shadowScale;
mRect.set(let, top, right, bottom);
@@ -747,9 +809,10 @@ private boolean ensureValidRect() {
float shadowTop;
float shadowRight;
float shadowBottom;
+
if (mShapeState.mShadowOffsetX > 0) {
shadowLet = let + mShapeState.mShadowOffsetX;
- shadowRight = right - mShapeState.mShadowOffsetX;
+ shadowRight = right;
} else {
shadowLet = let;
shadowRight = right + mShapeState.mShadowOffsetX;
@@ -757,7 +820,7 @@ private boolean ensureValidRect() {
if (mShapeState.mShadowOffsetY > 0) {
shadowTop = top + mShapeState.mShadowOffsetY;
- shadowBottom = bottom - mShapeState.mShadowOffsetY;
+ shadowBottom = bottom;
} else {
shadowTop = top;
shadowBottom = bottom + mShapeState.mShadowOffsetY;
diff --git a/library/src/main/java/com/hjq/shape/drawable/ShapeState.java b/library/src/main/java/com/hjq/shape/drawable/ShapeState.java
index 8142927..593074c 100644
--- a/library/src/main/java/com/hjq/shape/drawable/ShapeState.java
+++ b/library/src/main/java/com/hjq/shape/drawable/ShapeState.java
@@ -3,6 +3,7 @@
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.view.Gravity;
/**
* author : Android 轮子哥
@@ -51,6 +52,8 @@ public class ShapeState extends Drawable.ConstantState {
public int mShadowOffsetX;
public int mShadowOffsetY;
+ public int mLineGravity = Gravity.CENTER;
+
public ShapeState() {}
public ShapeState(ShapeState state) {
@@ -98,6 +101,8 @@ public ShapeState(ShapeState state) {
mShadowColor = state.mShadowColor;
mShadowOffsetX = state.mShadowOffsetX;
mShadowOffsetY = state.mShadowOffsetY;
+
+ mLineGravity = state.mLineGravity;
}
@Override
diff --git a/library/src/main/java/com/hjq/shape/styleable/IShapeDrawableStyleable.java b/library/src/main/java/com/hjq/shape/styleable/IShapeDrawableStyleable.java
index af51a87..8888453 100644
--- a/library/src/main/java/com/hjq/shape/styleable/IShapeDrawableStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/IShapeDrawableStyleable.java
@@ -82,6 +82,14 @@ default int getStrokeCheckedColorStyleable() {
int getDashGapStyleable();
+ int getShadowSizeStyleable();
+
+ int getShadowColorStyleable();
+
+ int getShadowOffsetXStyleable();
+
+ int getShadowOffsetYStyleable();
+
int getInnerRadiusStyleable();
int getInnerRadiusRatioStyleable();
@@ -90,11 +98,5 @@ default int getStrokeCheckedColorStyleable() {
int getThicknessRatioStyleable();
- int getShadowSizeStyleable();
-
- int getShadowColorStyleable();
-
- int getShadowOffsetXStyleable();
-
- int getShadowOffsetYStyleable();
+ int getLineGravityStyleable();
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeButtonStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeButtonStyleable.java
index f7c612c..1e34e76 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeButtonStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeButtonStyleable.java
@@ -180,43 +180,48 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeButton_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeButton_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeButton_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeButton_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeButton_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeButton_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeButton_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeButton_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeButton_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeButton_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeButton_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeButton_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeButton_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeButton_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeButton_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeButton_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeButton_shape_lineGravity;
}
/**
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeCheckBoxStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeCheckBoxStyleable.java
index 7f1989d..bd45e52 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeCheckBoxStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeCheckBoxStyleable.java
@@ -191,43 +191,48 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeCheckBox_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeCheckBox_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeCheckBox_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeCheckBox_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeCheckBox_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeCheckBox_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeCheckBox_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeCheckBox_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeCheckBox_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeCheckBox_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeCheckBox_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeCheckBox_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeCheckBox_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeCheckBox_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeCheckBox_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeCheckBox_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeCheckBox_shape_lineGravity;
}
/**
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeConstraintLayoutStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeConstraintLayoutStyleable.java
index 13be81f..54bfcf1 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeConstraintLayoutStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeConstraintLayoutStyleable.java
@@ -180,42 +180,47 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeConstraintLayout_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeConstraintLayout_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeConstraintLayout_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeConstraintLayout_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeConstraintLayout_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeConstraintLayout_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeConstraintLayout_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeConstraintLayout_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeConstraintLayout_shape_lineGravity;
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeEditTextStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeEditTextStyleable.java
index 8650a11..ea0e0fa 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeEditTextStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeEditTextStyleable.java
@@ -180,43 +180,48 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeEditText_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeEditText_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeEditText_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeEditText_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeEditText_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeEditText_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeEditText_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeEditText_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeEditText_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeEditText_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeEditText_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeEditText_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeEditText_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeEditText_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeEditText_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeEditText_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeEditText_shape_lineGravity;
}
/**
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeFrameLayoutStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeFrameLayoutStyleable.java
index 525062d..ea1d1bc 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeFrameLayoutStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeFrameLayoutStyleable.java
@@ -180,42 +180,47 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeFrameLayout_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeFrameLayout_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeFrameLayout_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeFrameLayout_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeFrameLayout_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeFrameLayout_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeFrameLayout_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeFrameLayout_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeFrameLayout_shape_lineGravity;
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeImageViewStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeImageViewStyleable.java
index a11b303..64ca2c3 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeImageViewStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeImageViewStyleable.java
@@ -180,42 +180,47 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeImageView_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeImageView_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeImageView_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeImageView_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeImageView_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeImageView_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeImageView_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeImageView_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeImageView_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeImageView_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeImageView_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeImageView_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeImageView_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeImageView_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeImageView_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeImageView_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeImageView_shape_lineGravity;
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeLinearLayoutStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeLinearLayoutStyleable.java
index 2e3b8fc..74d73f8 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeLinearLayoutStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeLinearLayoutStyleable.java
@@ -180,42 +180,47 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeLinearLayout_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeLinearLayout_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeLinearLayout_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeLinearLayout_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeLinearLayout_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeLinearLayout_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeLinearLayout_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeLinearLayout_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeLinearLayout_shape_lineGravity;
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeRadioButtonStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeRadioButtonStyleable.java
index b820e5c..c99dbac 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeRadioButtonStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeRadioButtonStyleable.java
@@ -191,43 +191,48 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeRadioButton_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeRadioButton_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeRadioButton_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeRadioButton_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeRadioButton_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeRadioButton_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeRadioButton_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeRadioButton_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeRadioButton_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeRadioButton_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeRadioButton_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeRadioButton_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeRadioButton_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeRadioButton_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeRadioButton_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeRadioButton_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeRadioButton_shape_lineGravity;
}
/**
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeRadioGroupStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeRadioGroupStyleable.java
index 8da7674..9120689 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeRadioGroupStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeRadioGroupStyleable.java
@@ -180,42 +180,47 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeRadioGroup_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeRadioGroup_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeRadioGroup_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeRadioGroup_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeRadioGroup_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeRadioGroup_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeRadioGroup_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeRadioGroup_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeRadioGroup_shape_lineGravity;
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeRecyclerViewStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeRecyclerViewStyleable.java
index a3d0280..d8c7e93 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeRecyclerViewStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeRecyclerViewStyleable.java
@@ -180,42 +180,47 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeRecyclerView_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeRecyclerView_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeRecyclerView_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeRecyclerView_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeRecyclerView_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeRecyclerView_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeRecyclerView_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeRecyclerView_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeRecyclerView_shape_lineGravity;
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeRelativeLayoutStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeRelativeLayoutStyleable.java
index 7bf046a..701617f 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeRelativeLayoutStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeRelativeLayoutStyleable.java
@@ -180,42 +180,47 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeRelativeLayout_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeRelativeLayout_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeRelativeLayout_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeRelativeLayout_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeRelativeLayout_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeRelativeLayout_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeRelativeLayout_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeRelativeLayout_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeRelativeLayout_shape_lineGravity;
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeTextViewStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeTextViewStyleable.java
index b0e30ef..45817e8 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeTextViewStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeTextViewStyleable.java
@@ -180,43 +180,48 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeTextView_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeTextView_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeTextView_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeTextView_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeTextView_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeTextView_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeTextView_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeTextView_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeTextView_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeTextView_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeTextView_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeTextView_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeTextView_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeTextView_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeTextView_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeTextView_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeTextView_shape_lineGravity;
}
/**
diff --git a/library/src/main/java/com/hjq/shape/styleable/ShapeViewStyleable.java b/library/src/main/java/com/hjq/shape/styleable/ShapeViewStyleable.java
index 14b827c..659b6fe 100644
--- a/library/src/main/java/com/hjq/shape/styleable/ShapeViewStyleable.java
+++ b/library/src/main/java/com/hjq/shape/styleable/ShapeViewStyleable.java
@@ -180,42 +180,47 @@ public int getDashGapStyleable() {
}
@Override
- public int getInnerRadiusStyleable() {
- return R.styleable.ShapeView_shape_innerRadius;
+ public int getShadowSizeStyleable() {
+ return R.styleable.ShapeView_shape_shadowSize;
}
@Override
- public int getInnerRadiusRatioStyleable() {
- return R.styleable.ShapeView_shape_innerRadiusRatio;
+ public int getShadowColorStyleable() {
+ return R.styleable.ShapeView_shape_shadowColor;
}
@Override
- public int getThicknessStyleable() {
- return R.styleable.ShapeView_shape_thickness;
+ public int getShadowOffsetXStyleable() {
+ return R.styleable.ShapeView_shape_shadowOffsetX;
}
@Override
- public int getThicknessRatioStyleable() {
- return R.styleable.ShapeView_shape_thicknessRatio;
+ public int getShadowOffsetYStyleable() {
+ return R.styleable.ShapeView_shape_shadowOffsetY;
}
@Override
- public int getShadowSizeStyleable() {
- return R.styleable.ShapeView_shape_shadowSize;
+ public int getInnerRadiusStyleable() {
+ return R.styleable.ShapeView_shape_innerRadius;
}
@Override
- public int getShadowColorStyleable() {
- return R.styleable.ShapeView_shape_shadowColor;
+ public int getInnerRadiusRatioStyleable() {
+ return R.styleable.ShapeView_shape_innerRadiusRatio;
}
@Override
- public int getShadowOffsetXStyleable() {
- return R.styleable.ShapeView_shape_shadowOffsetX;
+ public int getThicknessStyleable() {
+ return R.styleable.ShapeView_shape_thickness;
}
@Override
- public int getShadowOffsetYStyleable() {
- return R.styleable.ShapeView_shape_shadowOffsetY;
+ public int getThicknessRatioStyleable() {
+ return R.styleable.ShapeView_shape_thicknessRatio;
+ }
+
+ @Override
+ public int getLineGravityStyleable() {
+ return R.styleable.ShapeView_shape_lineGravity;
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/hjq/shape/view/ShapeButton.java b/library/src/main/java/com/hjq/shape/view/ShapeButton.java
index 32d9e5c..5d4644f 100644
--- a/library/src/main/java/com/hjq/shape/view/ShapeButton.java
+++ b/library/src/main/java/com/hjq/shape/view/ShapeButton.java
@@ -55,8 +55,6 @@ public void setTextColor(int color) {
return;
}
mTextColorBuilder.setTextColor(color);
- mTextColorBuilder.clearTextGradientColors();
- mTextColorBuilder.clearTextStrokeColor();
}
@Override
diff --git a/library/src/main/java/com/hjq/shape/view/ShapeCheckBox.java b/library/src/main/java/com/hjq/shape/view/ShapeCheckBox.java
index d33c19e..1d46975 100644
--- a/library/src/main/java/com/hjq/shape/view/ShapeCheckBox.java
+++ b/library/src/main/java/com/hjq/shape/view/ShapeCheckBox.java
@@ -61,7 +61,6 @@ public void setTextColor(int color) {
return;
}
mTextColorBuilder.setTextColor(color);
- mTextColorBuilder.clearTextGradientColors();
}
@Override
diff --git a/library/src/main/java/com/hjq/shape/view/ShapeEditText.java b/library/src/main/java/com/hjq/shape/view/ShapeEditText.java
index b550afb..4f0b0c2 100644
--- a/library/src/main/java/com/hjq/shape/view/ShapeEditText.java
+++ b/library/src/main/java/com/hjq/shape/view/ShapeEditText.java
@@ -55,7 +55,6 @@ public void setTextColor(int color) {
return;
}
mTextColorBuilder.setTextColor(color);
- mTextColorBuilder.clearTextGradientColors();
}
@Override
diff --git a/library/src/main/java/com/hjq/shape/view/ShapeRadioButton.java b/library/src/main/java/com/hjq/shape/view/ShapeRadioButton.java
index deb5863..5c7e312 100644
--- a/library/src/main/java/com/hjq/shape/view/ShapeRadioButton.java
+++ b/library/src/main/java/com/hjq/shape/view/ShapeRadioButton.java
@@ -61,7 +61,6 @@ public void setTextColor(int color) {
return;
}
mTextColorBuilder.setTextColor(color);
- mTextColorBuilder.clearTextGradientColors();
}
@Override
diff --git a/library/src/main/java/com/hjq/shape/view/ShapeTextView.java b/library/src/main/java/com/hjq/shape/view/ShapeTextView.java
index 1859727..35b91aa 100644
--- a/library/src/main/java/com/hjq/shape/view/ShapeTextView.java
+++ b/library/src/main/java/com/hjq/shape/view/ShapeTextView.java
@@ -55,7 +55,6 @@ public void setTextColor(int color) {
return;
}
mTextColorBuilder.setTextColor(color);
- mTextColorBuilder.clearTextGradientColors();
}
@Override
diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml
index 1cc236c..64bb07c 100644
--- a/library/src/main/res/values/attrs.xml
+++ b/library/src/main/res/values/attrs.xml
@@ -95,6 +95,15 @@
+
+
+
+
+
+
+
+
+
@@ -104,14 +113,16 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -193,15 +204,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -253,15 +266,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -315,15 +330,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -385,15 +402,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -453,15 +472,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -513,15 +534,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -559,15 +582,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -605,15 +630,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -651,15 +678,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -697,15 +726,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -743,15 +774,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -789,15 +822,17 @@
+
+
+
+
+
-
-
-
-
+
@@ -835,15 +870,17 @@
+
+
+
+
+
-
-
-
-
+
\ No newline at end of file