diff --git a/README.md b/README.md index d9cb054..72b3879 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ android { dependencies { // Shape 框架:https://github.com/getActivity/ShapeView - implementation 'com.github.getActivity:ShapeView:5.0' + implementation 'com.github.getActivity:ShapeView:5.2' } ``` diff --git a/ShapeView.apk b/ShapeView.apk index 6e9c7a9..db15fa3 100644 Binary files a/ShapeView.apk and b/ShapeView.apk differ diff --git a/app/build.gradle b/app/build.gradle index b8d2455..a0b454a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { minSdkVersion 16 // noinspection ExpiredTargetSdkVersion targetSdkVersion 28 - versionCode 50 - versionName "5.0" + versionCode 52 + versionName "5.2" } // 支持 Java JDK 8 @@ -41,6 +41,13 @@ android { signingConfig signingConfigs.config } } + + applicationVariants.all { variant -> + // apk 输出文件名配置 + variant.outputs.all { output -> + outputFileName = rootProject.getName() + '.apk' + } + } } dependencies { diff --git a/app/src/main/java/com/hjq/shape/demo/MainActivity.java b/app/src/main/java/com/hjq/shape/demo/MainActivity.java index 9f84750..102ef7b 100644 --- a/app/src/main/java/com/hjq/shape/demo/MainActivity.java +++ b/app/src/main/java/com/hjq/shape/demo/MainActivity.java @@ -2,6 +2,9 @@ import android.os.Bundle; import android.support.v7.app.AppCompatActivity; +import android.view.View; + +import com.hjq.shape.view.ShapeButton; public class MainActivity extends AppCompatActivity { @@ -9,5 +12,17 @@ public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + + ShapeButton shapeButton = findViewById(R.id.btn_main_test); + shapeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + shapeButton.setSolidColor(0xFF000000) + .setStrokeColor(0xFF5A8DDF) + .intoBackground(); + + shapeButton.setText("颜色已经改变啦"); + } + }); } -} +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index e5c8c8b..b75e913 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -50,6 +50,22 @@ app:shape_solidColor="#5A8DDF" app:shape_solidPressedColor="#AA5A8DDF" /> + + + + + app:shape_solidColor="#80ff0000" + app:shape_thicknessRatio="4" /> + app:shape_thicknessRatio="4" /> + app:shape_thicknessRatio="4" /> + app:shape_thicknessRatio="4" /> + app:shape_thicknessRatio="4" /> 0; + } + V setInnerRadius(int radius); int getInnerRadius(); @@ -229,12 +233,22 @@ default Drawable buildBackgroundDrawable() { return null; } - if (isGradientColor() || getSolidColor() == getSolidPressedColor() && getStrokeColor() == getStrokePressedColor() && + ShapeDrawable defaultDrawable = createShapeDrawable(getSolidColor(), getStrokeColor()); + // 判断是否设置了渐变色 + if (isGradientColor()) { + if (getCenterColor() == getSolidColor()) { + defaultDrawable.setColors(new int[]{getStartColor(), getEndColor()}); + } else { + defaultDrawable.setColors(new int[]{getStartColor(), getCenterColor(), getEndColor()}); + } + } + + if (getSolidColor() == getSolidPressedColor() && getStrokeColor() == getStrokePressedColor() && getSolidColor() == getSolidCheckedColor() && getStrokeColor() == getStrokeCheckedColor() && getSolidColor() == getSolidDisabledColor() && getStrokeColor() == getStrokeDisabledColor() && getSolidColor() == getSolidFocusedColor() && getStrokeColor() == getStrokeFocusedColor() && getSolidColor() == getSolidSelectedColor() && getStrokeColor() == getStrokeSelectedColor()) { - return createShapeDrawable(getSolidColor(), getStrokeColor()); + return defaultDrawable; } StateListDrawable drawable = new StateListDrawable(); @@ -253,30 +267,19 @@ default Drawable buildBackgroundDrawable() { if (getSolidColor() != getSolidSelectedColor() || getStrokeColor() != getStrokeSelectedColor()) { drawable.addState(new int[]{android.R.attr.state_selected}, createShapeDrawable(getSolidSelectedColor(), getStrokeSelectedColor())); } - drawable.addState(new int[]{}, createShapeDrawable(getSolidColor(), getStrokeColor())); + + drawable.addState(new int[]{}, defaultDrawable); return drawable; } - default Drawable createShapeDrawable(int solidColor, int strokeColor) { + default ShapeDrawable createShapeDrawable(int solidColor, int strokeColor) { ShapeDrawable drawable = new ShapeDrawable(); drawable.setShape(getShapeType()); drawable.setSize(getShapeWidth(), getShapeHeight()); drawable.setCornerRadii(new float[]{getTopLeftRadius(), getTopLeftRadius(), getTopRightRadius(), getTopRightRadius(), getBottomRightRadius(), getBottomRightRadius(), getBottomLeftRadius(), getBottomLeftRadius()}); - int startColor = getStartColor(); - int centerColor = getCenterColor(); - int endColor = getEndColor(); - if (isGradientColor()) { - if (centerColor == solidColor) { - drawable.setColors(new int[]{startColor, endColor}); - } else { - drawable.setColors(new int[]{startColor, centerColor, endColor}); - } - } else { - drawable.setColor(solidColor); - } - + drawable.setColor(solidColor); drawable.setGradientCenter(getCenterX(), getCenterY()); drawable.setUseLevel(isUseLevel()); drawable.setGradientAngle(getAngle()); diff --git a/library/src/main/java/com/hjq/shape/core/ShapeDrawable.java b/library/src/main/java/com/hjq/shape/core/ShapeDrawable.java index f922d5e..85b94fd 100644 --- a/library/src/main/java/com/hjq/shape/core/ShapeDrawable.java +++ b/library/src/main/java/com/hjq/shape/core/ShapeDrawable.java @@ -274,7 +274,7 @@ public void setColor(int argb) { * 设置渐变颜色 */ public void setColors(int[] colors) { - mShapeState.setColors(colors); + mShapeState.setGradientColor(colors); mRectIsDirty = true; invalidateSelf(); } @@ -641,7 +641,7 @@ private boolean ensureValidRect() { mRect.set(bounds.left + inset + mShapeState.mShadowSize, bounds.top + inset + mShapeState.mShadowSize, bounds.right - inset - mShapeState.mShadowSize, bounds.bottom - inset - mShapeState.mShadowSize); - final int[] colors = st.mColors; + final int[] colors = st.mGradientColors; if (colors != null) { RectF r = mRect; float x0, x1, y0, y1; @@ -765,7 +765,7 @@ public Drawable mutate() { private void initializeWithState(ShapeState state) { if (state.mHasSolidColor) { mFillPaint.setColor(state.mSolidColor); - } else if (state.mColors == null) { + } else if (state.mGradientColors == null) { // If we don't have a solid color and we don't have a gradient, // the app is stroking the shape, set the color to the default // value of state.mSolidColor diff --git a/library/src/main/java/com/hjq/shape/core/ShapeState.java b/library/src/main/java/com/hjq/shape/core/ShapeState.java index a2f531f..d248905 100644 --- a/library/src/main/java/com/hjq/shape/core/ShapeState.java +++ b/library/src/main/java/com/hjq/shape/core/ShapeState.java @@ -16,7 +16,7 @@ public class ShapeState extends Drawable.ConstantState { public int mShapeType = ShapeType.RECTANGLE; public int mGradient = ShapeGradientType.LINEAR_GRADIENT; public ShapeGradientOrientation mOrientation; - public int[] mColors; + public int[] mGradientColors; public int[] mTempColors; // no need to copy public float[] mTempPositions; // no need to copy public float[] mPositions; @@ -49,7 +49,7 @@ public class ShapeState extends Drawable.ConstantState { public ShapeState(ShapeGradientOrientation orientation, int[] colors) { mOrientation = orientation; - setColors(colors); + setGradientColor(colors); } public ShapeState(ShapeState state) { @@ -57,8 +57,8 @@ public ShapeState(ShapeState state) { mShapeType = state.mShapeType; mGradient = state.mGradient; mOrientation = state.mOrientation; - if (state.mColors != null) { - mColors = state.mColors.clone(); + if (state.mGradientColors != null) { + mGradientColors = state.mGradientColors.clone(); } if (state.mPositions != null) { mPositions = state.mPositions.clone(); @@ -124,16 +124,16 @@ public void setGradientCenter(float x, float y) { mCenterY = y; } - public void setColors(int[] colors) { + public void setGradientColor(int[] colors) { mHasSolidColor = false; - mColors = colors; + mGradientColors = colors; computeOpacity(); } public void setSolidColor(int argb) { mHasSolidColor = true; mSolidColor = argb; - mColors = null; + mGradientColors = null; computeOpacity(); } @@ -158,8 +158,8 @@ private void computeOpacity() { return; } - if (mColors != null) { - for (int color : mColors) { + if (mGradientColors != null) { + for (int color : mGradientColors) { if (!isOpaque(color)) { mOpaque = false; return; diff --git a/library/src/main/java/com/hjq/shape/layout/ShapeConstraintLayout.java b/library/src/main/java/com/hjq/shape/layout/ShapeConstraintLayout.java index 15fb5de..bb3eeb9 100644 --- a/library/src/main/java/com/hjq/shape/layout/ShapeConstraintLayout.java +++ b/library/src/main/java/com/hjq/shape/layout/ShapeConstraintLayout.java @@ -165,7 +165,22 @@ public int getShapeHeight() { @Override public ShapeConstraintLayout setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -363,6 +378,18 @@ public int getGradientRadius() { @Override public ShapeConstraintLayout setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -543,8 +570,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); diff --git a/library/src/main/java/com/hjq/shape/layout/ShapeFrameLayout.java b/library/src/main/java/com/hjq/shape/layout/ShapeFrameLayout.java index 5811cb7..151ef6e 100644 --- a/library/src/main/java/com/hjq/shape/layout/ShapeFrameLayout.java +++ b/library/src/main/java/com/hjq/shape/layout/ShapeFrameLayout.java @@ -165,7 +165,22 @@ public int getShapeHeight() { @Override public ShapeFrameLayout setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -363,6 +378,18 @@ public int getGradientRadius() { @Override public ShapeFrameLayout setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -543,8 +570,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); diff --git a/library/src/main/java/com/hjq/shape/layout/ShapeLinearLayout.java b/library/src/main/java/com/hjq/shape/layout/ShapeLinearLayout.java index 78bce0c..7c85468 100644 --- a/library/src/main/java/com/hjq/shape/layout/ShapeLinearLayout.java +++ b/library/src/main/java/com/hjq/shape/layout/ShapeLinearLayout.java @@ -165,7 +165,22 @@ public int getShapeHeight() { @Override public ShapeLinearLayout setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -363,6 +378,18 @@ public int getGradientRadius() { @Override public ShapeLinearLayout setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -543,8 +570,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); diff --git a/library/src/main/java/com/hjq/shape/layout/ShapeRecyclerView.java b/library/src/main/java/com/hjq/shape/layout/ShapeRecyclerView.java index 5a03a17..3c2a0f2 100644 --- a/library/src/main/java/com/hjq/shape/layout/ShapeRecyclerView.java +++ b/library/src/main/java/com/hjq/shape/layout/ShapeRecyclerView.java @@ -165,7 +165,22 @@ public int getShapeHeight() { @Override public ShapeRecyclerView setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -363,6 +378,18 @@ public int getGradientRadius() { @Override public ShapeRecyclerView setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -543,8 +570,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); diff --git a/library/src/main/java/com/hjq/shape/layout/ShapeRelativeLayout.java b/library/src/main/java/com/hjq/shape/layout/ShapeRelativeLayout.java index 566bcca..8b36a0b 100644 --- a/library/src/main/java/com/hjq/shape/layout/ShapeRelativeLayout.java +++ b/library/src/main/java/com/hjq/shape/layout/ShapeRelativeLayout.java @@ -165,7 +165,22 @@ public int getShapeHeight() { @Override public ShapeRelativeLayout setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -363,6 +378,18 @@ public int getGradientRadius() { @Override public ShapeRelativeLayout setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -543,8 +570,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); 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 ca3ad33..0aaa45c 100644 --- a/library/src/main/java/com/hjq/shape/view/ShapeButton.java +++ b/library/src/main/java/com/hjq/shape/view/ShapeButton.java @@ -204,7 +204,22 @@ public int getShapeHeight() { @Override public ShapeButton setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -402,6 +417,18 @@ public int getGradientRadius() { @Override public ShapeButton setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -589,8 +616,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); 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 70f4f9e..adc56be 100644 --- a/library/src/main/java/com/hjq/shape/view/ShapeCheckBox.java +++ b/library/src/main/java/com/hjq/shape/view/ShapeCheckBox.java @@ -209,7 +209,25 @@ public int getShapeHeight() { @Override public ShapeCheckBox setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidCheckedColor == mSolidColor) { + mSolidCheckedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -418,6 +436,21 @@ public int getGradientRadius() { @Override public ShapeCheckBox setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeCheckedColor == mStrokeColor) { + mStrokeCheckedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -616,8 +649,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); 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 7ab0417..d4e003e 100644 --- a/library/src/main/java/com/hjq/shape/view/ShapeEditText.java +++ b/library/src/main/java/com/hjq/shape/view/ShapeEditText.java @@ -203,7 +203,22 @@ public int getShapeHeight() { @Override public ShapeEditText setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -401,6 +416,18 @@ public int getGradientRadius() { @Override public ShapeEditText setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -588,8 +615,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); diff --git a/library/src/main/java/com/hjq/shape/view/ShapeImageView.java b/library/src/main/java/com/hjq/shape/view/ShapeImageView.java index 153d15c..c924c9d 100644 --- a/library/src/main/java/com/hjq/shape/view/ShapeImageView.java +++ b/library/src/main/java/com/hjq/shape/view/ShapeImageView.java @@ -165,7 +165,22 @@ public int getShapeHeight() { @Override public ShapeImageView setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -363,6 +378,18 @@ public int getGradientRadius() { @Override public ShapeImageView setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -543,8 +570,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); 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 8fb468c..1f6770a 100644 --- a/library/src/main/java/com/hjq/shape/view/ShapeRadioButton.java +++ b/library/src/main/java/com/hjq/shape/view/ShapeRadioButton.java @@ -209,7 +209,25 @@ public int getShapeHeight() { @Override public ShapeRadioButton setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidCheckedColor == mSolidColor) { + mSolidCheckedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -418,6 +436,21 @@ public int getGradientRadius() { @Override public ShapeRadioButton setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeCheckedColor == mStrokeColor) { + mStrokeCheckedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -616,8 +649,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); 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 89662ff..eec892f 100644 --- a/library/src/main/java/com/hjq/shape/view/ShapeTextView.java +++ b/library/src/main/java/com/hjq/shape/view/ShapeTextView.java @@ -203,7 +203,22 @@ public int getShapeHeight() { @Override public ShapeTextView setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -401,6 +416,18 @@ public int getGradientRadius() { @Override public ShapeTextView setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -588,8 +615,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable); diff --git a/library/src/main/java/com/hjq/shape/view/ShapeView.java b/library/src/main/java/com/hjq/shape/view/ShapeView.java index fbfc959..0402b19 100644 --- a/library/src/main/java/com/hjq/shape/view/ShapeView.java +++ b/library/src/main/java/com/hjq/shape/view/ShapeView.java @@ -164,7 +164,22 @@ public int getShapeHeight() { @Override public ShapeView setSolidColor(int color) { + if (mSolidPressedColor == mSolidColor) { + mSolidPressedColor = color; + } + if (mSolidDisabledColor == mSolidColor) { + mSolidDisabledColor = color; + } + if (mSolidFocusedColor == mSolidColor) { + mSolidFocusedColor = color; + } + if (mSolidSelectedColor == mSolidColor) { + mSolidSelectedColor = color; + } mSolidColor = color; + mStartColor = color; + mCenterColor = color; + mEndColor = color; return this; } @@ -362,6 +377,18 @@ public int getGradientRadius() { @Override public ShapeView setStrokeColor(int color) { + if (mStrokePressedColor == mStrokeColor) { + mStrokePressedColor = color; + } + if (mStrokeDisabledColor == mStrokeColor) { + mStrokeDisabledColor = color; + } + if (mStrokeFocusedColor == mStrokeColor) { + mStrokeFocusedColor = color; + } + if (mStrokeSelectedColor == mStrokeColor) { + mStrokeSelectedColor = color; + } mStrokeColor = color; return this; } @@ -542,8 +569,8 @@ public void intoBackground() { if (drawable == null) { return; } - if (isShadowEnable()) { - // 需要关闭硬件加速,否则阴影无法生效 + if (isDashLineEnable() || isShadowEnable()) { + // 需要关闭硬件加速,否则虚线或者阴影在某些手机上面无法生效 setLayerType(View.LAYER_TYPE_SOFTWARE, null); } setBackground(drawable);