在本机反应中绘制拖放矩形

Posted

技术标签:

【中文标题】在本机反应中绘制拖放矩形【英文标题】:Drawing a drag and drop rectangle in react native 【发布时间】:2022-01-17 17:54:29 【问题描述】:

我需要在我的应用程序上创建一个图像,用户可以在该图像上绘制一个矩形以用手指选择图像的一个区域。然后我需要获取矩形的左上角和右下角坐标。

我已经在网上搜索了如何执行此操作,但无济于事。有人可以帮忙吗?

谢谢。

【问题讨论】:

【参考方案1】:

我建议查看react-native PanResponder 或react-native-gesture-handler PanGestureHandler. 它是一个响应触摸输入的组件,并在您拖动手指时计算 x 和 y 值,它还会告诉您从手指开始移动的距离。

您可以使用此数据并将 x 和 y 移动距离传递回 View 组件的宽度和高度值,以使其用手指拖出一个框。

编辑:

这是我刚刚使用 react-native-gesture-handler 进行的一些实验。

import  View  from 'react-native';
import  GestureEvent, PanGestureHandler, PanGestureHandlerEventPayload  from 'react-native-gesture-handler';

const Test = () => 
  const [start, setStart] = useState< x: number; y: number >(null);
  const [end, setEnd] = useState< x: number; y: number >( x: 0, y: 0 );
  const [dimensions, setDimensions] = useState< w: number; h: number >( w: 0, h: 0 );

  const onPress = (event: GestureEvent<PanGestureHandlerEventPayload>) => 
    const  x, y, translationX, translationY  = event.nativeEvent;
    if (!start) setStart( x: y, y: x );
    setDimensions( w: translationX, h: translationY );
  ;

  const onEnd = () => 
    if (!start) return;

    setEnd(start);
    setStart(null);
  ;

  return (
    <View style= flex: 1 >
      <PanGestureHandler onGestureEvent=onPress onEnded=onEnd>
        <View style= width: '100%', height: '100%', backgroundColor: 'red' >
          <View
            style=
              position: 'absolute',
              backgroundColor: 'blue',
              top: start?.x ?? end?.x,
              left: start?.y ?? end?.y,
              width: dimensions?.w ?? 0,
              height: dimensions?.h ?? 0,
            
          />
        </View>
      </PanGestureHandler>
    </View>
  );
;

export default Test;

【讨论】:

以上是关于在本机反应中绘制拖放矩形的主要内容,如果未能解决你的问题,请参考以下文章

CAD交互绘制矩形框(com接口)

是否可以在本机反应中绘制状态栏?

拖放事件时在画布上绘制的形状移动太远

H5 Canvas

如何在图像上拖放绘制的多边形

在多个矩形中绘制一个 NSString