今日は堀北真希さん25歳の誕生日!
デビュー当時から堀北真希さんを応援してるのでかれこれ10年(>_<)
今日は写真集「Dramatic」の発売記念と合わせて、久々の握手会イベントがあったとのこと…残念ながら抽選外れましたが orz
今や飛ぶ鳥を落とす勢いな堀北さん、その可愛さのあまり、気が付けば自分のマシンに画像も溜まっているわけです…(別に仕事中に集めてるわけじゃないからねっ)
ということで、そういうフォルダを指定したら、その配下を走査して画像表示する簡易ビューアみたいなのをJavaFXで作ってみました(^^)
JavaFXやってみる
JavaFXをまともに触ったことなく、先日JJUGでハンズオンイベントが行われた際の資料を家でやったぐらいの私…(^^;(一応ブログ書いてた)
JavaFXハンズオンにお家でChallenge!
でもJavaOne2013の基調講演を生でみたら何か色々触ってみたい気持ちが強くなったので、やってみることに(^^)/
環境
せっかくなのでわりと新しい環境でやってみました。
OS:Windows 8 Professional
IDE:NetBeans7.4RC1
JDK:8 Early Access
Tool:SceneBuilder1.1
できたもの
先に動かしたプログラムの結果から(^^;
実行するとウィンドウが出てきて、堀北さんの写真が表示されます。
かわいいですね(^^)
少し薄くなってもかわいい(^^)
待って、まだみていたい!
あー消えてしまう…。
けど次っ!
と、5秒間、フェードアウトするように薄くなっていき、3秒停止して次の画像へ。が延々と繰り返されます。
それだけ(^^;
昔の写真も
かわいいですね(^^)笑
フォルダは以下のような感じで整理されてません(^^;
コード
作る前に「こんなことやらねばー」というのを挙げたら
- 画像表示
- フォルダ配下にある画像を(再帰的に)走査
- アニメーション
という感じでした。ざっくり仕様ですが。
で、ほとんど以下の@skrbさん記事に辿り着いて終わりました…(^^;なんと
で、とりあえず書いてみたのがこんな感じ。
package javafxsample;
import java.io.IOException;
import java.net.URL;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javafx.animation.Animation;
import javafx.animation.FadeTransition;
import javafx.animation.PauseTransition;
import javafx.animation.SequentialTransition;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.util.Duration;
public class MakiMakiViewerController implements Initializable {
画像表示エリア
@FXML
private ImageView photo;
画像パスのリスト
private List<String> imageList;
連続アニメーション
private SequentialTransition transition;
@Override
public void initialize(URL url, ResourceBundle rb) {
Path photoPathRoot = Paths.get("D:\\photo\\horikita");
imageList = new ArrayList<>();
FileVisitor<Path> visitor = new SimpleFileVisitor<Path>(){
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
imageList.add(file.toUri().toString());
return FileVisitResult.CONTINUE;
}
};
try {
Files.walkFileTree(photoPathRoot, visitor);
} catch (IOException ex) {
System.out.println("画像読み込みの途中でエラーが起きました。");
}
List<Animation> listAnime = new ArrayList<>();
imageList.stream().forEach((imagePath) -> {
photo.setImage(new Image(imagePath));
FadeTransition fade = new FadeTransition(Duration.millis(5000));
fade.setFromValue(1.0);
fade.setToValue(0.1);
fade.setAutoReverse(true);
fade.setCycleCount(1);
fade.setNode(photo);
PauseTransition pause = new PauseTransition(Duration.millis(3000));
pause.setOnFinished((ActionEvent t) -> {
photo.setImage(new Image(imagePath));
});
listAnime.add(fade);
listAnime.add(pause);
});
Animation[] arrAnime = new Animation[listAnime.size()];
transition = new SequentialTransition(listAnime.toArray(arrAnime));
transition.setCycleCount(Animation.INDEFINITE);
transition.play();
}
}
画像ファイルの判定とかしないと…ですが、とりあえず(^^)
せっかくなので色々機能を付け加えていこうかな~と。
しばらくChallenge JavaFXになりそう…?