From 7301b59527a9d6eab712335496cb24250ef0a64a Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Tue, 24 Nov 2020 17:28:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E8=AF=9D=E6=A1=86?= =?UTF-8?q?=E8=92=99=E5=B1=82=E9=A2=9C=E8=89=B2=E6=B7=B1=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 + .../src/main/res/values/colors.xml | 2 +- .../src/main/res/values/colors.xml | 2 +- .../src/main/res/values/styles.xml | 2 +- .../extensions/weather/StrokeTextView.java | 101 ++++++++++++++++++ .../res/layout/module_ext_layout_entrance.xml | 13 +++ 6 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/weather/StrokeTextView.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 8e9756d758..b59a552525 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -77,6 +77,7 @@ diff --git a/modules/mogo-module-authorize/src/main/res/values/colors.xml b/modules/mogo-module-authorize/src/main/res/values/colors.xml index 5886e84810..e32111d451 100644 --- a/modules/mogo-module-authorize/src/main/res/values/colors.xml +++ b/modules/mogo-module-authorize/src/main/res/values/colors.xml @@ -3,5 +3,5 @@ #99FFFFFF #FFFFFF #FFFFFF - #7F000000 + #99000000 \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/res/values/colors.xml b/modules/mogo-module-common/src/main/res/values/colors.xml index 0856fc721d..3b0ff8796d 100644 --- a/modules/mogo-module-common/src/main/res/values/colors.xml +++ b/modules/mogo-module-common/src/main/res/values/colors.xml @@ -1,6 +1,6 @@ - #7f000000 + #99000000 #FFFFFF #FFFFFF #FFFFFF diff --git a/modules/mogo-module-common/src/main/res/values/styles.xml b/modules/mogo-module-common/src/main/res/values/styles.xml index e12e13d325..047f2a7f55 100644 --- a/modules/mogo-module-common/src/main/res/values/styles.xml +++ b/modules/mogo-module-common/src/main/res/values/styles.xml @@ -5,7 +5,7 @@ @null true @android:color/transparent - 0.4 + 0.6 true @null @android:color/transparent diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/weather/StrokeTextView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/weather/StrokeTextView.java new file mode 100644 index 0000000000..65e37ad663 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/weather/StrokeTextView.java @@ -0,0 +1,101 @@ +package com.mogo.module.extensions.weather; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.text.Layout; +import android.text.TextPaint; +import android.util.AttributeSet; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.mogo.skin.support.IMogoSkinCompatSupportable; +import com.mogo.skin.support.helper.MogoSkinCompatTextHelperDelegate; + +import java.lang.reflect.Field; + +/** + * 带边框的textView + * + * @author tongchenfei + */ +public class StrokeTextView extends AppCompatTextView implements IMogoSkinCompatSupportable { + + private MogoSkinCompatTextHelperDelegate textHelperDelegate; + + public StrokeTextView(Context context) { + this(context,null); + } + + public StrokeTextView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public StrokeTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + textHelperDelegate = new MogoSkinCompatTextHelperDelegate(this); + } + + @Override + public void setTextAppearance(Context context, int resId) { + super.setTextAppearance(context, resId); + textHelperDelegate.onSetTextAppearance(context, resId); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int widthSize = getMeasuredWidth(); + if (widthMode == MeasureSpec.AT_MOST) { + widthSize += 20; + Layout mLayout = getLayout(); + if (mLayout != null) { + mLayout.increaseWidthTo(widthSize); + } + setMeasuredDimension(widthSize, getMeasuredHeight()); + } + } + + @Override + protected void onDraw(Canvas canvas) { + int oriColor = getCurrentTextColor(); + // 先画边框 + TextPaint paint = getPaint(); + setCurTextColor(Color.YELLOW); + paint.setStyle(Paint.Style.STROKE); + paint.setShadowLayer(10F, 0F, 0F, Color.YELLOW); + float b = getTextSize() / 20; + float shadowWidth = Math.max(b, 2f); + paint.setStrokeWidth(shadowWidth); + super.onDraw(canvas); + // 再画文字 + setCurTextColor(oriColor); + paint.setStyle(Paint.Style.FILL); + super.onDraw(canvas); + } + + /** + * 通过反射直接设置mCurTextColor这个变量,直接调用{@link #setTextColor(int)}会出现重复递归的问题 + * + * @param color 要设置的颜色值 + */ + private void setCurTextColor(int color) { + try { + Field mCurTextColor = TextView.class.getDeclaredField("mCurTextColor"); + mCurTextColor.setAccessible(true); + mCurTextColor.set(this,color); + mCurTextColor.setAccessible(false); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + @Override + public void applySkin() { + textHelperDelegate.applySkin(); + } +} diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index 4446c317a0..9e11dc3fce 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -291,4 +291,17 @@ android:visibility="gone" app:constraint_referenced_ids="btnShowDrawableTipNoSize,btnShowDrawableTip,btnShowTextTip,btnDebugCtrlNaviView,btnDebugCtrlSubView,btnDebugCtrlTopView,btnDebugAddBottomLayerView" /> + \ No newline at end of file