2013-12-20 91 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

代码工作,但没有与选定的图像网址 –