• ベストアンサー

activityの向きを変えた時のMatrix

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

  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
回答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

  • AS3.0 matrix.scale 時、イージングさせたい

    AS3.0 matrix.scale 時、イージングさせたい 事情があり matrix を使って拡大縮小をしています。 var matrix:Matrix = mc.transform.matrix; matrix.translate(0, 0); matrix.scale(1.2, 1.2); mc.transform.matrix = matrix; 概ね上記のようなスクリプトです。 matrix.scale(n, n); // ←イージングさせたい スケールを滑らかにイージングさせたいのですが、 何かいい方法はありますでしょうか? ENTER_FRAME や Tweenerで、"n"を変化させる事ができればと思いってはいるのですが・・・。

    • ベストアンサー
    • Flash
  • 分を表す数字(int型)を時間形式に直しString型で返したい

    分を表す数字(int型)を時間形式に直しString型で返す 以下のようなメソッドを作成したいのですが、 実装方法を教えて頂けないでしょうか↓ /** * 分(int型) → 時間:分:秒(String型) に直して返すメソッド。 * int minute = 120; * String time = timeFormat( minute ); * この時、timeの値は、" 2:00:00 " */ public String timeFormat(int minute) { ~ 実装 ~ }

  • listview とactivity について

    android studio のアプリ制作でlistview とactivity についての使い方について、教えてください。初心者です。listview の画面と2つのactivities の遷移ぐらいだけは作成できます。 質問 : 20の国名をlistviewに並べて、各国名をクリックすれば、別の画面でその国の国旗の画像と簡単な説明文が読める内容です。新しいactivityを20個つくらずにする方法をわかりやすく教えてください。 ネットでずいぶん検索したんですが見当たりません。ある方から、”けんちんとん”さんというサイトを紹介されたのですが、少し古くかつeclipseなので設定が異なり、できませんでした。 初心者でわかりやすい動画やサイトが嬉しいのですが? よろしくお願いします。

  • gitbucketのDB移行時のACTIVITY

    gitbucketの実行環境を、Windows上でのJava実行(gitbucket.war起動)から、Dockerコンテナ内での実行に移行しようとしています。これまでのgitbucket設定・環境・ユーザーの入ったdatabaseを新環境に移行したいのですが、旧環境からexportしたSQLファイルを新環境にimportすると"ACTIVITY"テーブルが無いと怒られます。 新しいgitbucketではACTIVITYテーブルは存在しないのでしょうか? 旧gitbucket環境:バージョン4.31.2(H2) Win+Java 新gitbucket環境:バージョン4.38.5(mysql)WSL2+Docker 試したこと。 ◯旧gitbucketでexportするときに、ACTIVITYを外してSQLをエクスポートすると、新環境でエラー無くimportできました。もちろん、ACTIVITYに関する履歴は新gitbucketの管理画面には表示されませんでした。 ◯新gitbucket環境において、旧環境から移行せずに、適当なレポジトリを作って適当にファイルをpushして履歴が表示されるか(ACTIVITYテーブルが生成されるか)を確認してみました。gitbucketの管理画面では履歴が表示されますが、System AdministrationのData export/importやDatabase Viewerを開いてみても、ACTIVITYテーブルは存在しませんでした。では、push履歴はどこに保存されているのだろう? ACTIVITYテーブルの履歴は新gitbucketに移行できなくても大して問題はないのですが、移行できるならしたいし、gitbucketのバージョンアップ(4.31.2→4.38.5)の間にACTIVITYテーブルが廃止された(あるいはexportできなくなった)のであればそれはそれで諦めもつきます。 ご存じの方いらっしゃいましたら、ご教示下さい。

  • VisualC++で、変数を他のメソッドで利用するにはどうしたらいいですか?

    今、VisualC++(CLR)で、アプリケーションを使っているのですが、 あるメソッドで作ったString型の変数を ほかのメソッドで利用するにはどうしたらいいですか? intならグローバル変数でいけるのですが、 String^ 型なのでできないようです。 グローバル以外に利用する方法があれば教えてください お願いします

  • 印刷の向きをそろえたい

    印刷の向きをそろえたいのですがどう設定したらいいのでしょうか?? (例)A4の紙に 山田太朗  2枚印刷して貼り合わせると違う向きになります 張り合わせた時に左から山田太朗と向きをそろえたいです

  • Macのプレビューで写真の向きが変わらないのはなぜですか?

    はじめまして 現在、MacBookのMac OC Xバージョン10.4を使用しています。 プレビューを使って写真の向きを変え、保存をクリックするとプレビュー ではきちんと向きが変わっているのですが、保存先であるFinderのフォルダ 内では変わりません。ブログに載せても向きは変わっておらず。。 購入当初は出来ていました。何の設定も変えていません。 どうしてなのかサッパリ分かりません。教えて下さい!お願いします!

    • ベストアンサー
    • Mac
  • byte配列→float型の値を読みlongに変換

    UTF-8 encodingで書かれたテキスト分とfloat型 (IEEE-754/octet-stream)で書かれたバイナリ分混ざったファイルがあります。そのファイルをdataInputStreamを使って読んで、byte配列に保存されています。 FileInputStream fis = new FileInputStream(ファイル); DataInputStream dis = new DataInputStream(fis); byte[] bs = new byte[適切なサイズ]; //読み込み dis.read(bs); byte配列「bs」のindex 0 から 5までテキスト情報(XML式のヘッダー情報)あると仮定します。 UTF-8の分は for loop で "new String(bs, loop index, 1, "ASCII")"すると読み取れます。 問題は以下: index 6 から 17まではfloat型のバイナリデータ保存されているとします。 たとえば、index 6 から 順番に以下のHex string があります。 01 2A 5F 4E   B4 F2 45 4E   92 6A 5F 4E (4つのグループにしたのは分かりやすくするため) 上記float型のHex String をlong intに変換して、別途用意された配列に保存したい。 ネット検索でByteBufferにwrapメソッドを使って、getFloat(index) 又は getFloat()でfloat型取得できると書いていますがその先はどうやってlong int変換できるのでしょうか? 上記のHex string の変換後の値(取扱いしたい値)は19554126, 3035776334, 2456444750です。 今までのコード: long [] data = new long [既知のサイズ]; ByteBuffer b = ByteBuffer.wrap(bs).order(ByteOrder.LITTLE_ENDIAN); //なんらかのloop 又は ByteBuffer b の最後まで読める仕組み(remainingというメソッド?){ Float f = b.getFloat(); 又は Float f = b.getFloat(loop index); data[index] = fの longに変換した値 // つまり 19554126, 3035776334 .... } ネットで探していますが、やり方まだわからない。 どなたか、教えてください。 よろしくお願いします。

  • ”DAME”と”WIN??(32?)??MATRIX”

    セキリティソフト avast!4.7 Home Editionを利用しています。 いくつかのサイトを開いている時に、”DAME”に感染したという警告が出ました。 直ぐにウィルス・チェストに移動しようとしたらエラーが出たため、 全てのウィンドウを閉じて、ウィルス検索を行ったところ、 ”DAME”と”WIN??(32?)??MATRIX”みたいな事が書かれたウィルスが検出されました。 ”DAME”はチェストに移動出来たのですが、”WIN”の方はエラーが起こりました。 名前だけ覚えて調べようと思った瞬間、間違えて画面を消してしまいました。 仕方ないので、再度検索したところ、”WIN”は検出されませんでした。 その後、普通に使えたので、ネット等を始めてしまったのですが、 (1)”WIN??(32?)??MATRIX”の削除の方法 (2)”DAME”と”WIN??(32?)??MATRIX”はどんな被害のウィルスでしょうか? (3)ユーザーを分けて使っているのですが、他のユーザーにも感染しますか?  (感染しないようなら、感染したユーザーの一部のファイルを逃がして、削除してしまうことも考えています) ちなみにOSはXP HomeEdition 2002 SP2です。 よろしくお願いします。

  • 筆まめ 27 印刷時の用紙の向きについて

    封筒印刷を行う際に横置きにして印刷をしていますが、フラップの向きの設定方法がわかりません。 同じ設定で印刷をしようとしていますが、毎回フラップの向きが変わってしまいます。 ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

専門家に質問してみよう