文字加描边的效果

效果如图:


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>
  );
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容