Cara melakukan penskalaan gabungan/paralel dan animasi terjemahan di JavaFX 8

Saya baru saja mulai bermain-main dengan Java FX dan sangat menyukainya. Saya belum membaca buku atau tutorial mendalam tentang hal ini, jadi pertanyaan ini mungkin sangat mudah dijawab.

Saya ingin memperbesar ImageView dan menunjukkan kepada pengguna wilayah tertentu dari Gambar jika dia mengeklik area tertentu pada gambar. Untuk lebih jelasnya perhatikan Gambar berikut:

masukkan deskripsi gambar di sini

(jika gambar terlalu kecil, ini versi yang lebih besar)

(A) menampilkan gambar lengkap yang saya gunakan (world-map.jpg, ukuran: 4.000px X 3.000px)

(1) menunjukkan Tahap yang saya tunjukkan kepada pengguna. Saya melakukan beberapa penskalaan awal dan terjemahan pada objek ImageView agar tampilan lebih terpusat pada Eropa dan Afrika. Wilayah yang ditandai adalah Elemen tambahan dengan Event handler terlampir (tidak ada dalam kode saya)

(2) menunjukkan hasil yang saya dapatkan setelah melakukan ParallelTransition

(3) menunjukkan hasil yang ingin dapatkan

Apa yang terjadi ketika saya melakukan ParallelTransition adalah ImageView diperbesar dengan benar tetapi juga diterjemahkan ke sudut kanan bawah Gambar. Apa kesalahan yang telah aku perbuat?

Ini kode Aplikasi JavaFX saya:

@Override
  public void start(final Stage stage)
  {

    // our root group
    final Group g = new Group();

    // load image
    ImageView im = new ImageView();
    // using a helper method to load external resource
    Image img = FileUtils.loadImage(R.imageWorldMap);
    im.setImage(img);
    g.getChildren().add(im);

    // translate to center view on europe and africa
    Translate t = new Translate();
    t.setX(-300);
    t.setY(-200);
    im.getTransforms().add(t);

    // zoom out because source image is huge
    Scale scale = new Scale();
    scale.setX(.3);
    scale.setY(.3);
    im.getTransforms().add(scale);

    // create scene and show stage
    final Scene s = new Scene(g, 640, 480);
    stage.setScene(s);
    stage.show();

    // code below is normally inside an event handler 
    // but for simplicity reason and testing its like that now

    // move europe to the center
    TranslateTransition translateTransition =
            new TranslateTransition(Duration.millis(2000), im);

    translateTransition.setToX(1100); // 3300
    translateTransition.setToY(900); // 2700

    // scale in europe
    ScaleTransition scaleTransition =
            new ScaleTransition(Duration.millis(2000), im);
    scaleTransition.setToX(3f);
    scaleTransition.setToY(3f);

    // create parallel translation
    ParallelTransition parallelTransition = new ParallelTransition();
    parallelTransition.getChildren().addAll(
            scaleTransition
            , translateTransition
    );

    parallelTransition.play();

  }

Saya bermain-main sedikit dengan koordinat untuk mendapatkan hasil yang lebih baik, dan memang demikian, tetapi saya ingin memahami cara menyelesaikan tugas ini secara pragmatis.

Sebagai pertanyaan tambahan, dapatkah Anda merekomendasikan (berdasarkan pengalaman Anda) buku untuk Java FX 8.

Teknologi yang saya gunakan: Win7, Java8, JavaFX8


person Chris    schedule 14.09.2014    source sumber


Jawaban (1)


Saya akan merujuk pada contoh... Demo di bawah javafx ada proyek yang melakukan apa yang Anda inginkan, saya percaya.. MandrelBot ... src ada dalam paket yang sama..

person jdub1581    schedule 20.09.2014