`
lzj520
  • 浏览: 213509 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

FLEX 容器内多个图片分别拖动

阅读更多

 

其中的要点是,使用getObjectsUnderPoint来获取当前鼠标指针下的对象,得到的是一个多个对象的数组,需要用objects[i] is ImageSkin来判断是否是图片,如果是图片,则转换成拖动的图,比如:dragInitiator = objects[i].parent as Image ;

 

参考代码,flex4.5下测试通过:

 

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
applicationComplete="initDragAndDrop()"
>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import flash.display.BitmapData;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.TextField;
import mx.collections.ArrayCollection;
import mx.containers.Canvas;
import mx.controls.Alert;
import mx.controls.VideoDisplay;
import mx.core.DragSource;
import mx.core.UIComponent;
import mx.events.*;
import mx.graphics.ImageSnapshot;
import mx.graphics.codec.JPEGEncoder;
import mx.managers.DragManager;
import spark.components.Button;
import spark.components.Image;
import spark.skins.spark.ImageSkin;

private var _mask:Image = new Image() ;
private var _dragaImage:Image = new Image();
private var _xOff:Number;
private var _yOff:Number;
private var _transformX:int;
private var _transformY:int;

public function initDragAndDrop():void {
initMask();
}

public function initMask():void {
_mask.source = "panadaBg.png" ;
_mask.width = 200 ;
_mask.height = 200 ;
myGroup.addElement( new UIComponent() );
myGroup.addElement( _mask );
}

public function initJpgDrag(event:MouseEvent):void {
var dragInitiator:Image = Image(event.currentTarget);
var ds:DragSource = new DragSource();
ds.addData(dragInitiator.source, "source");
ds.addData(dragInitiator.width, "width");
ds.addData(dragInitiator.height, "height");
_xOff = event.currentTarget.mouseX;
_yOff = event.currentTarget.mouseY;
DragManager.doDrag(dragInitiator, ds, event);
}

public function phandleDragEnter(event:DragEvent):void {
DragManager.acceptDragDrop( spark.components.Group( event.target ) );
}

public function phandleDragOver(event:DragEvent):void
{
if ( event.ctrlKey )
{
DragManager.showFeedback( DragManager.COPY );
event.currentTarget.setStyle( 'borderColor', 'blue' );
}
else if (event.shiftKey)
{
DragManager.showFeedback( DragManager.LINK );
event.currentTarget.setStyle( 'borderColor', 'green' );
}
else
{
DragManager.showFeedback(DragManager.MOVE);
event.currentTarget.setStyle( 'borderColor', 'yellow' );
}
var dragInitiator:Image = myGroup.getChildAt( 0 ) as Image;
if ( dragInitiator != null )
{
dragInitiator.visible = false ;
}
}

public function phandleDrop(event:DragEvent):void
{
var dragaImage:Image = new Image();
dragaImage.source = event.dragSource.dataForFormat( "source" ) as String;
dragaImage.width = event.dragSource.dataForFormat( "width" ) as int;
dragaImage.height = event.dragSource.dataForFormat( "height" ) as int;

var tempX:int = event.currentTarget.mouseX - _xOff ;
var tempY:int = event.currentTarget.mouseY - _yOff ;
dragaImage.transform.matrix = tmpMatrix ;
dragaImage.x = tempX ;
dragaImage.y = tempY ;
myGroup.removeElement( _mask );
if( event.action == DragManager.MOVE && event.dragInitiator.owner == myGroup )
{
var dragaImage2:Image = event.dragInitiator as Image ;
dragaImage2.x = tempX ;
dragaImage2.y = tempY ;

}else{
myGroup.addElement( dragaImage );
}

myGroup.addElement( _mask );
}

public function phandleDragExit(event:DragEvent):void { }

public function snapShot():void {
var mergeImage:Image = new Image() ;
mergeImage.x = 300 ;
var c2:BitmapData = ImageSnapshot.captureBitmapData( myGroup );
var myCanvasBmp:BitmapData =
new BitmapData( myGroup.width, myGroup.height, true, 0x00000000 );
myCanvasBmp.draw(myGroup,new Matrix());
var bitmap : Bitmap = new Bitmap( myCanvasBmp );
mergeImage.source = c2 ;
this.addElement( mergeImage );
}

public function panadaImageMove(event:MouseEvent):void
{
var dragInitiator:Image = Image( event.currentTarget );
var ds:DragSource = new DragSource();
ds.addData( dragInitiator.source,"source" );
ds.addData( dragInitiator.width,"width" );
ds.addData( dragInitiator.height,"height" );
DragManager.doDrag( dragInitiator, ds, event );
}

private function initJpgDragInCanvas(event:MouseEvent):void
{

var objects:Array = myGroup.getObjectsUnderPoint
(
new Point( event.stageX, event.stageY )
);
objects.sort();
var dragInitiator:Image = new Image ;
for (var i:int=0; i < objects.length; i++)
{
if ( objects[i] is ImageSkin )
{
trace ( "***" + objects[i].parent ) ;
dragInitiator = objects[i].parent as Image ;
}
}


if ( dragInitiator == null )
{
return ;
}
var ds:DragSource = new DragSource();
ds.addData( dragInitiator, "img" );
ds.addData( dragInitiator.source, "source" );
ds.addData( dragInitiator.width, "width" );
ds.addData( dragInitiator.height, "height" );
var imageProxy:Image = new Image();
imageProxy.source = dragInitiator;
imageProxy.height = 100;
imageProxy.width = 100;
imageProxy.transform.matrix = null;
_xOff = event.currentTarget.mouseX - dragInitiator.x ;
_yOff = event.currentTarget.mouseY - dragInitiator.y ;
DragManager.doDrag( dragInitiator, ds, event, imageProxy, 0, 0 );
}

private var tmpMatrix:Matrix;
   
]]>
</fx:Script>
<s:VGroup id = "Catalog">
<s:Image id = "panada" source = "100.jpeg"
width = "100" height = "100"
mouseMove = "initJpgDrag(event)"
/>
</s:VGroup>
<s:Group id = "myGroup" width = "200" height = "200"
x = "200" y = "200"
clipAndEnableScrolling = "true"
dragEnter="phandleDragEnter( event )"
dragOver="phandleDragOver( event )"
dragDrop="phandleDrop( event )"
dragExit="phandleDragExit( event )" mouseMove="initJpgDragInCanvas( event )"
>
<s:Rect width = "100%" height = "100%" id = "bgRect">
<s:fill><s:SolidColor color = "0xFF0000" /></s:fill>
</s:Rect>
</s:Group>
<s:Button click="setTimeout( snapShot, 1000 )" label = "合成" />
 </s:Application>

分享到:
评论

相关推荐

    flex容器的布局,图片样式效果设计

    在Flex容器中,每个元素被称为flex项。容器可以通过设置`display: flex;`或`display: inline-flex;`属性开启flex布局。这使得容器可以沿主轴(flex-direction决定,默认为水平的row)和交叉轴(与主轴垂直)对齐和...

    flex 两个图片播放小程序

    在这个“flex 两个图片播放小程序”项目中,我们可以看到它被用来创建一个图片浏览应用,支持图片的放大和缩小功能,提供了用户友好的交互体验。接下来,我们将深入探讨Flex在图片浏览中的应用及其关键技术。 首先...

    flex 图片画线,拖动

    在IT行业中,尤其是在Web开发领域,"flex 图片画线,拖动"是一个常见的交互功能需求,用于增强用户体验。这个功能通常涉及到HTML5、CSS3和JavaScript等技术,特别是Flex布局和SVG图形技术。让我们详细探讨一下这个...

    flex实现的删除子容器

    例如,如果有一个Flex容器`container`,其中包含一个子元素`child`,删除`child`的代码如下: ```javascript let child = container.querySelector('.child'); container.removeChild(child); ``` - 如果子容器...

    flex鼠标拖动图片

    通过以上步骤,你可以在Flex环境中创建一个可拖动并能在鼠标释放时停止的图片组件。这个功能可以用于各种应用场景,如图像编辑工具、布局设计应用或是任何需要用户自由调整元素位置的场景。记得在实际开发中根据项目...

    Flex 图片旋转 缩放 拖动 特效

    综上所述,这个Flex项目通过自定义控件实现了图片的旋转、缩放和拖动特效,充分利用了Flex提供的显示对象、矩阵变换和事件处理机制。开发者可以轻松地将其集成到自己的应用中,为用户提供丰富的交互体验。在实际开发...

    FLex 左右滑动图片墙

    这个组件通常会包含一个图片容器,用户可以通过手势或导航按钮来浏览图片。以下是一些关键知识点: 1. **布局管理器**:在Flex中,布局管理器是控制组件大小和位置的关键。在这个例子中,我们可能会使用`Horizontal...

    FLEX自定义拖拽容器Dashboard

    flex写的一个可拖拽的容器系统 有点像背包系统 但背包内元素是图标 这个是容器里面愿意放什么放什么(如列表、日历等) 本资源非原创 从老外那找的 里面是纯代码生成的 支持技术研究(如果是图片格式请不要下载,...

    flex实现的拖拽控件

    在这个场景中,我们关注的是Flex实现的拖拽控件,这是一种交互式UI元素,允许用户通过鼠标操作移动元素,提供了丰富的用户体验。 拖拽功能在Flex中可以通过使用内置的DragManager类和Event类来实现。DragManager类...

    flex3一个简单购物车拖拽的例子

    在Flex3中,你可以创建具有丰富用户界面和交互功能的应用程序,而“flex3一个简单购物车拖拽的例子”是一个演示如何在Flex环境中实现拖放功能的实例。这个例子展示了如何将商品图标或项拖入数据网格(DataGrid)中,...

    Flex相册 Flex图片

    Flex相册 Flex图片

    flex图片放大缩小

    1. **创建Flex容器**: 在HTML中,为图片创建一个容器,并设置`display: flex`。 2. **设置图片为Flex项目**: 将图片作为容器内的子元素,并赋予适当的样式,如初始大小和位置。 3. **添加交互**: 使用...

    微信小程序开发中flex布局容器及元素之属性技术释疑.pdf

    在上述示例中,flex-container类定义了一个Flex布局的容器,item类定义了容器内的Flex元素。通过设置flex属性,可以对每个item元素进行相应的控制,比如让元素在容器内均匀分布、或者对齐到容器的某个特定位置。 ...

    FLEX主要容器关系图

    `HDivideBox`和`VDivideBox`分别用于创建水平和垂直分割的容器,子项可以通过拖动分隔条来调整大小。 ### Grid(网格) `Grid`容器用于创建具有行和列的表格布局,适用于数据密集型应用,如电子表格或数据库视图。...

    Flex4.6+java+servlet上传图片例子+图片上传预览

    这个"Flex4.6+java+servlet上传图片例子+图片上传预览"的项目,结合了前端的Flex技术和后端的Java Servlet,为我们提供了一个完整的解决方案。下面将详细解释这个项目的各个组成部分及其工作原理。 首先,让我们来...

    flex拖拽

    在前端开发中,"flex拖拽"是一种常见交互设计,特别是在构建可自定义布局或需要用户手动调整元素位置的应用中。Flex布局(Flexible Box Layout)是CSS3的一种布局模式,它提供了一种更加灵活的方式来控制容器中子...

    flex svg代码生成图片

    "Flex SVG 代码生成图片" 在 Flex 应用程序中,使用 SVG 资源可以实现图表生成图片并下载。以下是关于 Flex SVG 代码生成图片的知识点: 一、静态显示 SVG 图像 在 Flex 应用程序中,可以使用 SVG 资源,但只能...

    flex aladino 图片展示特效

    在本文中,我们将深入探讨如何使用Flex实现一个名为"Aladino"的图片展示特效,这是一种纵向滚动的图片展示效果,具有强烈的视觉吸引力。虽然原作者未能将其转换为横向滚动,但我们可以通过理解Flex布局原理来尝试...

    Flex 拖拽图片代码

    - `mx:Canvas`:这是一个容器,用于放置拖拽后产生的新图片。 - `mx:Image`:这是一张初始图片,id 为 `img`,用户可以通过点击该图片开始拖拽。 接下来,我们逐个分析这几个函数的作用: **3.1 initApp() 函数** ...

Global site tag (gtag.js) - Google Analytics