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