1

コンポーネントを使用してHorizontalList画像のリストを表示しています。別のコンポーネントから画像をドラッグしてリストに参加させることができます。これはすべて正常に機能します。

すると、画像の上部にlist.showDropFeedback(event)見苦しい黒いバーが表示されますHorizontalList。実際に必要なのは、新しい画像が実際に配置される画像の左右の線です。

デフォルトをオーバーライドするには、カスタム DropFeedback を定義する必要があると思います。これを達成する方法があるかどうか誰かが知っていますか?

ありがとう!

4

5 に答える 5

2

アプリケーションスタイルに以下を追加することで、最終的にこれを解決しました..

HorizontalList {
 dropIndicatorSkin: ClassReference("com.package.HorizontalListDropIndicator");
} 

そして私のカスタムスキンを作成します..

package com.package {

 import flash.display.Graphics;
 import mx.skins.ProgrammaticSkin;

 public class HorizontalListDropIndicator extends ProgrammaticSkin {

  public function HorizontalListDropIndicator() {
   super();
  }

  override protected function updateDisplayList(w:Number, h:Number):void {  
   super.updateDisplayList(w, h);

   var g:Graphics = graphics;

   g.clear();
   g.lineStyle(2, 0xFF0000);

   g.moveTo(0, 0);
   g.lineTo(0, 250);

  }
 }
}
于 2009-03-12T11:52:11.643 に答える
1

リストベースのコンポーネントをドラッグしたときに表示される線の外観を制御する dropIndicatorSkin というスタイル プロパティがあります。アドビのドキュメントから:

dropIndicatorSkin

ドラッグしたアイテムをドロップできる場所を示すために使用するスキン。ListBase 派生コンポーネントがドラッグ アンド ドロップ操作でドロップ ターゲットになる可能性がある場合、メソッドの呼び出しによってこのクラスのインスタンスが作成され、項目showDropFeedback()の 1 ピクセル上に配置されます。itemRendererドロップアイテムの次のアイテム。デフォルト値は ですmx.controls.listClasses.ListDropIndicator

すべての機能は、あなたが求めていることを行うために Horizo​​ntalList に組み込まれていますが、Horizo​​ntalList には方向プロパティを水平に設定しないというバグがあるようです。

必要なことは、mxml 宣言に direction="horizo​​ntal" を入れるだけで、dropIndicatorSkin を 90 度回転させ、アイテムの上ではなくアイテムの間に配置します。

<mx:HorizontalList ... direction="horizontal" ... />
于 2009-02-26T17:41:50.610 に答える
0

ありがとう、これは dropIndicator を期待どおりに回転させるようですが、他の非常に予期しない動作を引き起こします。リストの水平スクロール バーが突然消え、アイテムをリストにドラッグすると、最後までスキップされます.. もうすぐそこにいるように感じますが、完全ではありません!

私のAS3コード....

// in constructor... (extends HorizontalList)
this.direction = "horizontal";

this.addEventListener(DragEvent.DRAG_ENTER, onDragEnter);
this.addEventListener(DragEvent.DRAG_OVER, onDragOver);
this.addEventListener(DragEvent.DRAG_EXIT, onDragExit);
this.addEventListener(DragEvent.DRAG_DROP, onDragDrop);

private function onDragEnter(event:DragEvent):void {
    event.preventDefault();
    if (event.dragSource.hasFormat("treeItems") || event.dragSource.hasFormat("items")) {
        DragManager.acceptDragDrop(event.target as UIComponent);
    }
    this.showDropFeedback(event);
}

public function onDragOver(event:DragEvent):void {
    event.preventDefault();
    this.showDropFeedback(event);
}

public function onDragExit(event:DragEvent):void {
    event.preventDefault();
    this.showDropFeedback(event);
}

private function onDragDrop(event:DragEvent):void {
    event.preventDefault();
    this.hideDropFeedback(event);
    //....
}
于 2009-02-27T11:35:31.497 に答える