• ベストアンサー

activityの向きを変えた時のMatrix

Matrixを設定してactivityの向きを変えるときに初期化するんですが、その時Matrixも保存されずに初期化しちゃうと思うのですがこのonSaveInstansState()メソッドでintとかString、floatは保存されますがMatrixを一時保存する方法はいなのでしょうか?ほかに保存する方法はないのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは! 遅くなってすいません…。 No.1です。 なるほどです。 > 2の場合Staticに指定してやったのですが(別のクラスです)、それも初期化してしまうのでダメでした。 何故初期化してしまうんでしょうね? 例えば一時キャッシュでもダメでしょうか? 私はたまにこんな一時キャッシュを用意しておいて Listとか保存したりしています。 (別Threadで重いList生成とかやらせたりします) public class TempCache { private TempCache() {} private static TempCache instance = new TempCache(); private Map<String, Object> map = new HashMap<String, Object>(); public static TempCache getInstance() { return instance; } public void setCache(String key, Object data) { map.put(key, data); } public Object getCache(String key) { map.get(key); } } (今ザックリ書いたんで細かい所は修正して下さい…) 私はこれで使えてました。 例えば処理が物凄く重くて、GCが走った形跡とかはないですか?

その他の回答 (1)

回答No.1

こんにちは! Matrixでは確か保存するようなメソッドはなかったと思います。 「activityの向きを変えた時」というのは 「画面の向きを変えた時」という認識でおります。 で、その場合初期化させない方法としては  1.android:configChanges="orientation|keyboardHidden"で初期化されないようにする  2.Matrixクラスをstaticにして、初期化された時にstaticなMatrixに値があったらそのまま使う  3.そもそもportrateを指定して回転させない  4.postScaleとかdrawBitmapに設定した値を個々にonSaveInstanceStateで保存 など、ザッと考えても上記のような方法があるかと思います。 具体的にどのようにしたいかを示して頂ければ より的確なアドバイスができると思います。

takoyaki2019
質問者

お礼

回答ありがとうございます。 仕様としては、横にしたとき写真を縦と横専用のフレームがあって写真は向きを変えた時にでも位置は変わらないようにしたいのですが。 1の場合横向きにした場合画面も横向き専用にしなければならないのでできません。 2の場合Staticに指定してやったのですが(別のクラスです)、それも初期化してしまうのでダメでした。 3はMatrixで回転はしないといけないのでそれは避けたいです。 4は、個々に保存しても拡大縮小、移動、角度変更したときに順番が異なると位置も違うのでそれはできないです。

関連するQ&A

専門家に質問してみよう