May 2011
[Android]ドラッグ、ピンチイン/アウトできるMatrixImageView ver0.1
- 2011-05-08 (Sun)
- android
Androidでちょっとやりたいことがあって、拡大した画像を自由にスクロール表示させる必要があった。 で、そういうViewがあるのだと思って探していたら、意外にも見つからない。
よくピンチイン/アウトしたりドラッグしたりする画像ビューアあるけど、あれみんな自力で実装してるということ? そんなバカな、と思ったけど探しても見つからないし、とりあえず必要最低限のものはすぐできそうだったので作ってみた。
こちらのプログラムをかなり参考に、ベースにさせていただきました。 利用イメージはこんな感じ。
使い方は以下のようになります。 最後に記載しているMatrixImageView.javaのソースコードを貼っつけて、xmlファイル内でImageViewと同じように使用します。(もちろんソースコード内で直接MatrixImageViewを扱ってもOK)
<jp.obanet.android.MatrixImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img_view"
android:src="@drawable/sample"
interval="20"
inertial="true"
speedDecRatio="0.85"
angleSpeedDecRatio="0.85" />
上4行はImageViewに指定するものと全く同じ。画像ファイルの指定や表示方法など。 下4行がMatrixImageView独自のパラメータです。省略したらデフォルト値が使用されます。
| パラメータ名 | 意味 | タイプ | デフォルト値 |
|---|---|---|---|
| inertial | (指を離した後)慣性動作させるかどうか | boolean | true |
| interval | 慣性のアニメーションの更新間隔(ミリ秒)。小さい値ほど綺麗に動いて見えます。もちろんその分処理コストはかかります。 | int | 20 |
| speedDecRatio | ドラッグ移動の慣性の減衰率。つまり摩擦。1に近いほどツルツルすべる。氷に近いイメージ。 | float | 0.85 |
| angleSpeedDecRatio | 回転の慣性の減衰率。同じく1に近いほどツルツル回る。 | float | 0.85 |
今後の改良点としては以下を一応考えてますが、僕の目的は現状でも十分達せられるため、実装するかどうかはわかりません。
- 画像が外に飛び出していかないようにする機能
- 内部の処理効率化、リファクタリング
- その他Androidアプリ一般に必要なことの考慮(今回が初めてのAndroid開発なので色々足りないことがあると思ってる)
ちなみにMatrixImageViewにはインナークラスLineがあり、これは以前ActionScript用に作成したもの([ActionScript]2直線の交点を求める)を移植、取り入れました。 直線同士の交点を出すためのものだったのですが、今回の必要に応じて2直線の角度を算出する機能をつけました。ここで配布するのに便利なようにインナークラスとして使っています。
ソースコードは続きに記載します。 利用、改変に関しては、僕が勝手に作った「猿ロッキングライセンス」を適用します。 一番最後の猿ロッキングライセンスに関する注意事項をよく読んでください。