2013-12-20 44 views
0

如何加載任何圖像並將其放置在圓形視圖中,並且用戶使用鼠標可以將其圓形視圖中的圖像拖動到所需的方向。有什麼控制要做到這一點。我試過並使用了一個填充了圖像的圓,但是我不能移動圖像,也不能在其中選擇視圖端口。任何想法?將圖像放在圓圈視圖中

回答

7

使用setClip(...)選擇「視口」。 您需要自己實現拖動。

事情是這樣的:

import javafx.application.Application; 
import javafx.beans.property.ObjectProperty; 
import javafx.beans.property.SimpleObjectProperty; 
import javafx.event.EventHandler; 
import javafx.geometry.Point2D; 
import javafx.scene.Scene; 
import javafx.scene.image.ImageView; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.Pane; 
import javafx.scene.shape.Circle; 
import javafx.stage.Stage; 

public class ImageInCircleExample extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     final Pane root = new Pane(); 
     final ImageView imageView = new ImageView("http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/640px-Sunset_2007-1.jpg"); 
     final Circle clip = new Circle(300, 200, 200); 
     imageView.setClip(clip); 
     root.getChildren().add(imageView); 

     // enable dragging: 
     final ObjectProperty<Point2D> mouseAnchor = new SimpleObjectProperty<>(); 
     imageView.setOnMousePressed(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY())); 
      } 
     }); 
     imageView.setOnMouseDragged(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       double deltaX = event.getSceneX() - mouseAnchor.get().getX(); 
       double deltaY = event.getSceneY() - mouseAnchor.get().getY(); 
       imageView.setLayoutX(imageView.getLayoutX() + deltaX); 
       imageView.setLayoutY(imageView.getLayoutY() + deltaY); 
       clip.setCenterX(clip.getCenterX() - deltaX); 
       clip.setCenterY(clip.getCenterY() - deltaY); 
       mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY())); 
      } 
     }); 

     final Scene scene = new Scene(root, 600, 400); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+1

正是我所需要的,完美! –

+0

代碼工作,但沒有與選定的圖像網址 –