Path
Crie caminhos com comandos como mover, linha, quad, cúbico, arco e fechar. Adequado para personalizar ponteiros, curvas e contornos combinados e definir regras de preenchimento e traços.
Exemplo
function main() {
return (
<Path
commands={[
{ op: 'move', x: 10, y: 80 },
{ op: 'line', x: 60, y: 10 },
{ op: 'line', x: 110, y: 80 },
{ op: 'close' },
]}
background={$env.accent}
stroke={$env.foreground}
lineWidth={2}
/>
);
}
Uso
- commands executa em ordem: move inicia, line/quad/cubic/arc adiciona, close fecha. x/y de arc é o centro. evenOdd cria furos em contornos aninhados. Voltar ao início não equivale a close.
- contentAnimation transiciona texto, imagem ou dados estruturados. interpolate exige pontos/closed Polyline, sequência Path ou amostras compatíveis. Mudanças estruturais atualizam imediatamente.
Propriedades
commandsReadonlyArray<PathCommand>Comandos locais de caminho em pontos. Um array vazio não desenha nada.
[{op: "move", x: 0, y: 0}, {op: "line", x: 100, y: 80}]fillRule?"nonZero" | "evenOdd"Regra de preenchimento: nonZero ou evenOdd.
"nonZero"background?PaintPreenchimento do interior do caminho. Transparente por padrão.
"clear"stroke?PaintCor ou gradiente do traço; clear o oculta.
HDR($env.dark ? "white" : "black")lineWidth?numberEspessura do traço em pontos; 0 não desenha traço.
2lineCap?"round" | "butt" | "square"Ponta da linha: butt corta, square estende em quadrado, round arredonda.
"round"lineJoin?"round" | "miter" | "bevel"Formato das junções: miter, round ou bevel.
"round"dash?number[]Comprimentos alternados de traço e espaço em pontos; matriz vazia faz linha contínua.
[]dashPhase?numberDeslocamento do padrão tracejado em pontos.
0trimStart?numberTrecho visível trimStart–trimEnd entre 0 e 1. Circle/Ellipse/Arc usam ângulos.
0trimEnd?numberTrecho visível trimStart–trimEnd entre 0 e 1. Circle/Ellipse/Arc usam ângulos.
1contentAnimation?ContentAnimationTransição de conteúdo opcional. interpolate exige a mesma quantidade de comandos e sequência de operações; caso contrário, atualiza imediatamente.
{type: "interpolate", duration: 0.25}Propriedades comuns
width?number | "auto" | "fill"Largura em pontos, tamanho automático ou preenchimento do contêiner.
"fill"height?number | "auto" | "fill"Altura em pontos, tamanho automático ou preenchimento do contêiner.
"fill"x?numberDeslocamento visual em pontos: x à direita, y para baixo; não muda o espaço no layout.
0y?numberDeslocamento visual em pontos: x à direita, y para baixo; não muda o espaço no layout.
0transform?ViewTransformTransforma o View inteiro sem mudar o layout. Translação em pontos, rotação/inclinação em graus, escala 1 sem mudança, âncoras 0–1.
{rotation: 0}opacity?numberOpacidade de todo o View: 0 transparente, 1 opaco.
1clipped?booleanRecorta o desenho que ultrapassa os limites do View.
falseclip?"rectangle" | "ellipse"Recorte rectangle ou ellipse; Material também aceita false para desativar.
"rectangle"mask?View | nullView de máscara alfa. Centralizada sem afetar o layout; null desativa a máscara.
<Circle width="fill" height="fill" background="white"/>zIndex?numberOrdem entre elementos irmãos; valores maiores ficam na frente.
0blur?numberRaio do desfoque em pontos; 0 desativa.
4innerShadow?DrawingEffectCor, opacidade, raio de desfoque e deslocamento x/y do efeito; distâncias em pontos.
{color: HDR("black"), opacity: 0.5, radius: 4, x: 0, y: 2}glow?DrawingEffectCor, opacidade, raio de desfoque e deslocamento x/y do efeito; distâncias em pontos.
{color: HDR("cyan"), radius: 8, opacity: 0.8}shadowColor?ColorCor da sombra externa.
HDR("black")shadowOpacity?numberOpacidade da sombra entre 0 e 1; 0 oculta.
0shadowRadius?numberRaio de desfoque da sombra externa em pontos.
4shadowX?numberDeslocamento da sombra em pontos: x à direita, y para baixo.
0shadowY?numberDeslocamento da sombra em pontos: x à direita, y para baixo.
2animations?Animation[]Anima mudanças de propriedade. duration/delay em segundos; from/to são extremos; repeat/autoreverse controlam repetição e wrap o período.
[{property: "opacity", duration: 0.25, curve: "easeInOut"}]key?string | numberIdentidade estável entre elementos irmãos.
Exemplo prático
function main() {
return (
<Path
width={140}
height={100}
fillRule="evenOdd"
background={$env.accent}
commands={[
{ op: 'move', x: 0, y: 0 },
{ op: 'line', x: 140, y: 0 },
{ op: 'line', x: 140, y: 100 },
{ op: 'line', x: 0, y: 100 },
{ op: 'close' },
{ op: 'move', x: 35, y: 25 },
{ op: 'line', x: 105, y: 25 },
{ op: 'line', x: 105, y: 75 },
{ op: 'line', x: 35, y: 75 },
{ op: 'close' },
]}
/>
);
}
Animação
widthheightxyopacitybackgroundblurshadowColorshadowOpacityshadowRadiusshadowXshadowYtrimStarttrimEnddashPhasestrokelineWidthtransform.translateXtransform.translateYtransform.scaleXtransform.scaleYtransform.rotationtransform.skewXtransform.skewYtransform.anchorXtransform.anchorYQuando omitido
A tabela apresenta omissões verificadas na implementação. Exemplos não são padrões. Para resultado fixo, passe valor explícito; dimensões e cores de contexto não são constantes.
| Propriedades | Quando omitido |
|---|---|
commands | [] |
fillRule | "nonZero" |
background | "clear" |
lineWidth | 2 |
stroke | HDR($env.dark ? 'white' : 'black') |