最近项目中遇到tilelist中拖拽的时scroll的移动速度太快,导致无法准确定位到某一行。Gosh!经过近4天终于找到解决方案。
1。首先override TileList的dragScroll方法,新的方法中将不做任何操作;
2。找到拖拽的dragProxy也即拖拽时展现的image,让其监听mouseMove方法,将stage.mouseY保存在成员变量中;
3。拖拽的时候启动一个定时器,设为每1秒钟执行一次,在执行方法中判断stage.mouseY,如果小于TileList的上边缘,滚动条上移一个单位,如果大于TileList的下边缘,滚动条下移一个单位。
部分代码如下:
Array = myTile.selectedItems;
if(tempData.length 300){
value = myTile.verticalScrollPosition + 1;
myTile.verticalScrollPosition = Math.min(myTile.maxVerticalScrollPosition,value);
}
}
private function proxyMoveHandler(event:MouseEvent):void {
trace(event.stageX+"x:----------------y:"+event.st ageY);
dragOjbY = event.stageY;
}
private function tileMouseDown(event:MouseEvent):void {
var target:ScrollThumb = event.target as ScrollThumb;
if(target){
trace("不进行拖拽---------滚动条-------");
canDrag = false;
return;
}
canDrag = true;
}
private function upHandler(event:MouseEvent):void {
if(dragTimer.running){
dragTimer.stop();
dragTimer.removeEventListener(TimerEvent.TIMER,dra gTimerHandler);
}
}
private function tileDragEnterHandler(event:DragEvent):void {
DragManager.acceptDragDrop(event.target as UIComponent);
}
]]>
1。首先override TileList的dragScroll方法,新的方法中将不做任何操作;
2。找到拖拽的dragProxy也即拖拽时展现的image,让其监听mouseMove方法,将stage.mouseY保存在成员变量中;
3。拖拽的时候启动一个定时器,设为每1秒钟执行一次,在执行方法中判断stage.mouseY,如果小于TileList的上边缘,滚动条上移一个单位,如果大于TileList的下边缘,滚动条下移一个单位。
部分代码如下:
Array = myTile.selectedItems;
if(tempData.length 300){
value = myTile.verticalScrollPosition + 1;
myTile.verticalScrollPosition = Math.min(myTile.maxVerticalScrollPosition,value);
}
}
private function proxyMoveHandler(event:MouseEvent):void {
trace(event.stageX+"x:----------------y:"+event.st ageY);
dragOjbY = event.stageY;
}
private function tileMouseDown(event:MouseEvent):void {
var target:ScrollThumb = event.target as ScrollThumb;
if(target){
trace("不进行拖拽---------滚动条-------");
canDrag = false;
return;
}
canDrag = true;
}
private function upHandler(event:MouseEvent):void {
if(dragTimer.running){
dragTimer.stop();
dragTimer.removeEventListener(TimerEvent.TIMER,dra gTimerHandler);
}
}
private function tileDragEnterHandler(event:DragEvent):void {
DragManager.acceptDragDrop(event.target as UIComponent);
}
]]>