• スポンサードリンク

イメージの拡大縮小・移動・回転できるImageViewを作ってみた〜その1〜準備編

Android ImageView widget

2の「ImageView様にセットして頂いたMatrxの値を頂戴して保存」と3の「その時点での拡大率を最低拡大率として保存」はこんな感じになります。

で、setStateとgetMatrixScaleの実体は下の通りです。

内容は、ImageView#getImageMatrixを呼び出して取得したImageView内部のMatrixの値をコピー(参照を代入するわけではありません)してmSavedImageMatrixフィールドとmImageMatrixフィールドにセットします。

更に、Matrixの値をfloat型の配列にコピーします。なぜわざわざfloat配列にコピーしておくかと言うと、Matrix内の個別要素に後々頻繁にアクセスすることになるのですが、Matrixの実体がJNIオブジェクトでアクセスのオーバーヘッドが大きいこと、またアクセスの大部分が読み取りのみなので変更を自前で管理可能なことからキャッシュのためにfloat配列にコピーします。

4.の「拡大縮小等を行わない元のイメージの大きさだけを取得して保存」と5.の「後々の移動範囲の制限用のフィールドなども設定」はこんな感じに。

そして最後の6.の「ごめんなさいやっぱり自前のMatrixを使いたいです、とImageView様にお願い」はこんな感じ。

ここまでで、イメージの拡大縮小・移動・回転に必要な準備はほぼ全部終了です。あとはタッチ操作に合わせてMatrixを変更してsuper.setImageMatrixを呼び出すだけです。描画に必要なことはみんなImageView様が行ってくれます。

4000字も超えて長くなってきたので今回はここまで。
お疲れ様でした。

と言いつつ、もう一つ。
部分部分のソースを貼り付けているのでわかりにくいのと、最後まで読まないと使えないなんてのはあんまりなので、全体のソースへのリンクを貼っつけておきます(いつ全部書き終えるかわかんないし(^_^;))。

全体のソースはこちら(GitHub)

« »

  • スポンサードリンク