2016-05-25 51 views
2

透明な背景を持つPNG画像として表されるオブジェクトをAnchorPaneからHBoxにドラッグしようとしています。透明なpng画像のJavaFXドラッグビュー

私はこの線でドラッグビューに画像を設定します。

 SliderItemHandler mh = (SliderItemHandler) event.getSource(); 
     Dragboard db = mh.startDragAndDrop(TransferMode.COPY); 
     db.setDragView(mh.getModule().getImage()); 
     ClipboardContent content = new ClipboardContent(); 
     db.setContent(content); 

私は考えてそれは不透明な背景画像を持つすべての罰金ですが、透明なものとイメージが不透明で白い背景を持って「0.8」 。

私は、ノードのスナップショットを取ってみました:

 db.setDragView(mh.snapshot(new SnapshotParameters(), null)); 

が、それはまだそこに、白い背景を動作しませんでした。 元の画像のように透明にする方法はありますか?

答えて

1

不透明度を考慮して、白い背景をどのように達成するかわかりません。しかし、私はあなたのユースケースを再作成し、これをどのように実装したかを示します。

次の画像は、Sceneを左にAnchorPane、右をHBoxに分割したものです。小さい透明な円は、コピーするソースImageViewであり、その隣に大きな円がドロップされたImageであり、現在最も遠い円は現在ドラッグされています。 (スクリーンショットは、カーソルが含まれていませんでした。)

Drag

あなたが白(またはほとんど白)背景がある3つのシナリオのいずれにおいても、見ることができるように。それはイメージ自体であり、イメージ自体はドラッグ中に少し透明です。

これを達成するには、2つの変数を考慮します。ソースImageViewと宛先HBox

@FXML 
private HBox destination; 
@FXML 
private ImageView image; 

我々は、画像をドラッグすることがしたいと思いますので、私たちはImageViewDRAG_DETECTEDイベントを追加します。

image.addEventHandler(MouseEvent.DRAG_DETECTED, mouseEvent -> { 
    Dragboard db = image.startDragAndDrop(TransferMode.COPY); 
    ClipboardContent content = new ClipboardContent(); 
    content.putImage(image.getImage()); 
    db.setContent(content); 
    mouseEvent.consume(); 
}); 

その後、我々はドラッグImageViewを受け入れるように先HBoxをしたいと思います。

destination.addEventHandler(DragEvent.DRAG_OVER, (DragEvent event) -> { 
    if (event.getDragboard().hasImage()) { 
     event.acceptTransferModes(TransferMode.COPY_OR_MOVE); 
    } 
    event.consume(); 
}); 

そしてもちろん、私たちは実際に低下したときHBoxImageViewを配置したいと思います。この場合、そのコピーはHBoxに置かれますが、それはもちろん実装のために開いています。

destination.addEventHandler(DragEvent.DRAG_DROPPED, (DragEvent event) -> { 
    Dragboard db = event.getDragboard(); 
    destination.getChildren().add(new ImageView(db.getImage())); 
    event.setDropCompleted(true); 
    event.consume(); 
}); 

画像をドラッグアンドドロップするだけです。透明な画像には、白い背景は含まれません。ただし、MCVEを作成できる場合は、それがまだ維持されていると問題を調べる方が簡単かもしれません。

+0

'db.setDragView'を 'content.putImage'に変更し、ドラッグイメージが再び透明になりました。違いは何か分かりませんが、うまくいきます。 –

0

あなたは塗りつぶしをtranspartentためにあなたのスナップショットのパラメータを変更する必要があります。

SnapshotParameters sp = new SnapshotParameters(); 
sp.setFill(Color.TRANSPARENT); 
db.setDragView(mh.snapshot(sp, null)); 

結果は白国境なしで透明になります。

関連する問題