Flex:تكرار سبيل المثال صورة
-
03-07-2019 - |
سؤال
لدي قم بسحب وإسقاط معالج في سلك معزول التطبيق.السحب الوكيل أو "الأشباح" صورة ليتم عرضها أثناء سحب, يجب تحميلها قبل السحب ، وهذا يستغرق بعض الوقت.كيف يمكنني تحميل مباشرة أو التحميل المسبق?حل واحد هو تكرار الصورة ، ولكن بقدر ما أعرف, صورة الأشياء لا يمكن أن تتكرر دون خلق متغير آخر ، والتي يجب أن لا تزال تأخذ بعض الوقت لتحميل.
ولعل هذا الكود سوف توضح بشكل أفضل:
public function DragApp (e : MouseEvent) : void {
var dragInitiator : Image = e.currentTarget as Image;
var dragSource : DragSource = new DragSource ();
var dragProxy : Image = new Image ();
dragProxy.source = e.currentTarget.source; // Won't work unless image is embedded
dragProxy.load (e.currentTarget.source); // Must load
setTimeout (DragManager.doDrag, 350, dragInitiator, dragSource, e, dragProxy);
}
المحلول
أعتقد أن المشكلة هي أنك لا تحديد العرض والارتفاع للصورة (بطريقة زائدة عن الصور المضمنة):
dragImage:IFlexDisplayObject (افتراضي = null) — صورة السحب.هذه الحجة هو اختياري.إذا تم حذف معيار اسحب المستطيل يستخدم خلال السحب والإفلات.إذا قمت بتحديد صورة ، يجب أن بشكل صريح تعيين الطول والعرض للصورة وإلا فإنه لن تظهر.
إذا كنت تحديد عرض وارتفاع الصورة الوكيل في المثال الخاص بك ، سوف تعمل على الأرجح:
var dragProxy : Image = new Image ();
dragProxy.source = dragInitiator.source;
dragProxy.width = dragInitiator.width;
dragProxy.height = dragInitiator.height;
نصائح أخرى
وكنت أفضل حالا باستخدام التقاط الصورة النقطية للصورة واستخدام ذلك كما dragProxy الخاص بك. وإليك بعض قواعد بسيطة لالتقاط BitmpData من أي UIComponent:
private function getUIComponentBitmapData( target : UIComponent ) : BitmapData
{
var bd : BitmapData = new BitmapData( target.width, target.height );
var m : Matrix = new Matrix();
bd.draw( target, m );
return bd;
}
وبمجرد الانتهاء من ذلك، يمكنك إنشاء نقطية جديدة باستخدام BitmapData وتوريد نقطية كمصدر للعنصر صورة. مزيد من التفاصيل / الأمثلة في هذا بلوق وظيفة:
http://www.cynergysystems.com/blogs/page/andrewtrice ؟ دخول = flex_2_bitmapdata_tricks_and