文字加描邊的效果

效果如圖:


image.png

代碼如下:

import Svg, { Text } from "react-native-svg";
import { FontFamily } from "../../../constants";
import pTd from "../../../utils/PxTdt";

export const getTextWidth = (text, fontSize) => {
  const value = `${text ?? ""}`;
  let width = 0;

  value.split("").forEach((char) => {
    if (char === " ") {
      width += fontSize * 0.32;
    } else if (/[\u4e00-\u9fa5]/.test(char)) {
      width += fontSize;
    } else {
      width += fontSize * 0.58;
    }
  });

  return Math.ceil(width);
};

/**
 * 帶描邊的文本
 */
export default function StrokeText({
  text = "打卡可得",
  fill = "rgba(0,0,0,0.9)",
  stroke = "#FFFFFF",
  fontSize = 26,
  lineHeight = 34,
  strokeWidth = 4,
  style
}) {
  const width = getTextWidth(text, fontSize) + strokeWidth * 2;
  const height = lineHeight + strokeWidth * 2;
  const x = strokeWidth;
  const y = strokeWidth + fontSize;

  return (
    <Svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} style={style}>
      <Text
        x={x}
        y={y}
        fill="none"
        stroke={stroke}
        strokeLinejoin="round"
        strokeLinecap="round"
        strokeWidth={strokeWidth}
        fontFamily={FontFamily.ExtraBold}
        fontSize={fontSize}
        fontWeight={"900"}>
        {text}
      </Text>
      <Text
        x={x}
        y={y}
        fill={fill}
        fontFamily={FontFamily.ExtraBold}
        fontSize={fontSize}
        fontWeight={"900"}>
        {text}
      </Text>
    </Svg>
  );
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容