Reactjs 如何将拖动的视图绑定到ScrollView项中?

Reactjs 如何将拖动的视图绑定到ScrollView项中?,reactjs,react-native,react-native-android,react-native-ios,Reactjs,React Native,React Native Android,React Native Ios,我用三个视图创建了ScrollView。我想在滚动视图中绑定拖动的视图,其余未拖放的视图应该在滚动视图之外进行维护。这怎么可能 查看GIF:我想在ScrollView中添加DragTableView 代码: import React,{Component}来自'React'; 进口{ 样式表, 看法 文本, 应答器, 有生气的 缓和,, 尺寸, 平台, 可触摸不透明度, 滚动视图, }从“反应本机”; 从“react native snap Carousel”导入转盘; 设圆_半径=36; le

我用三个视图创建了
ScrollView
。我想在
滚动视图
中绑定拖动的视图,其余未拖放的视图应该在
滚动视图
之外进行维护。这怎么可能

查看GIF:我想在ScrollView中添加DragTableView

代码:

import React,{Component}来自'React';
进口{
样式表,
看法
文本,
应答器,
有生气的
缓和,,
尺寸,
平台,
可触摸不透明度,
滚动视图,
}从“反应本机”;
从“react native snap Carousel”导入转盘;
设圆_半径=36;
let Window=Dimensions.get('Window');
const指令=Platform.select({
ios:'按Cmd+R重新加载,\n'+
“用于开发菜单的Cmd+D或shake”,
android:“双击键盘上的R以重新加载,\n”+
'为开发菜单摇动或按下菜单按钮',
});
导出默认类应用程序扩展组件{
建造师(道具){
超级(道具);
this.dataDrag=[1,2,3,4],
this.pan=this.dataDrag.map(()=>new Animated.ValueXY());
此.state={
showDraggable:是的,
DropZoneValue:null,
条目:['Apple1','Apple2','Apple3']
};
}
getPanResponder(索引){
返回PanResponder.create({
onStartShouldSetPanResponder:()=>true,
onPanResponderMove:Animated.event([null{
dx:this.pan[index].x,
dy:this.pan[index].y
}]),
onPanResponderRelease:(e,手势)=>{
如果(此.isDropZone(手势)){
这是我的国家({
showDraggable:false
});
}否则{
春天(
这个.潘[索引],,
{toValue:{x:0,y:0}
).start();
}
}
});
}
isDropZone(手势){
var dz=this.state.dropZoneValues;
返回sporter.moveY>dz.y&&sporter.moveY(

其基本思想是创建两个阵列,通过从一个结构中移除并复制到另一个结构来模拟移动效果

一步一步地:
  • 创建两个数组

    this.state={
    dataDrag:[…this.dataDrag],
    数据类型:[],
    };
    
  • OnPanResponderRelease
    ,移动到新阵列

    onPanResponderRelease:(e,手势)=>{
    如果(此.isDropZone(手势)){
    设idx=this.state.dataDrag.indexOf(index+1);
    这是我的国家({
    showDraggable:false,
    dataDrag:[…this.state.dataDrag.slice(0,idx),…this.state.dataDrag.slice(idx+1,this.state.dataDrag.length-1)],
    DataDrawed:[…this.state.DataDrawed,this.state.DataDraw[idx]],
    });
    }
    
  • 创建两组
    动画。视图
    ,一个在
    ScollView
    内部,一个在其外部

  • 最终代码:
    import React,{Component}来自'React';
    进口{
    样式表,
    看法
    文本,
    应答器,
    有生气的
    缓和,,
    尺寸,
    平台,
    可触摸不透明度,
    滚动视图,
    }从“反应本机”;
    设圆_半径=36;
    let Window=Dimensions.get('Window');
    导出类应用程序扩展组件{
    建造师(道具){
    超级(道具);
    this.dataDrag=[1,2,3,4],
    this.pan=this.dataDrag.map(()=>new Animated.ValueXY());
    此.state={
    showDraggable:是的,
    DropZoneValue:null,
    条目:['Apple1','Apple2','Apple3'],
    dataDrag:[…this.dataDrag],
    数据类型:[],
    };
    }
    getPanResponder(索引){
    返回PanResponder.create({
    onStartShouldSetPanResponder:()=>{
    返回true;
    },
    onPanResponderMove:Animated.event([null{
    dx:this.pan[index].x,
    dy:this.pan[index].y
    }]),
    onPanResponderRelease:(e,手势)=>{
    如果(此.isDropZone(手势)){
    设idx=this.state.dataDrag.indexOf(index+1);
    这是我的国家({
    showDraggable:false,
    dataDrag:[…this.state.dataDrag.slice(0,idx),…this.state.dataDrag.slice(idx+1,this.state.dataDrag.length-1)],
    DataDrawed:[…this.state.DataDrawed,this.state.DataDraw[idx]],
    });
    }否则{
    春天(
    这个.潘[索引],,
    {toValue:{x:0,y:0}
    ).start();
    }
    }
    });
    }
    isDropZone(手势){
    var dz=this.state.dropZoneValues;
    返回sporter.moveY>dz.y&&sporter.moveY(
    

    是的,但只有一个拖动视图添加到ScrollView中。假设我拖动View3并添加到ScrollView中,那么只有这个视图绑定到scroll中。其他剩余视图在ScrollView之外。@KiritModi我为您创建了一个新视图,但只有一个视图可以添加draggedView。我将它放回另一个视图中。在第一个视图中可以添加拖动视图。但第二个视图是v无法添加视图。我认为这是错误的