fc2ブログ

    AndroidでdrawTextOnPathが表示されない



    ■AndroidでdrawTextOnPathが表示されない

    「日付入りカメラ(DateCamera)」ってのを作ってるんですが、カメラプレビューに日付テキストのviewを重ねています。
    あるバージョンから日付が表示される機種とされない機種が出てきました。

    Xperia SPの場合(正常表示例)
    20131008_003.png
    ちゃんと表示される、話の分かる奴だ。


    GALAXY S3 Progre SCL21の場合
    20131008_002.png
    ボタンと撮影補助線しか表示されず、右下のテキストが表示されない。
    (cameraプレビューはテスト機種なので両機種とも無視)

    実は、このテキストが表示されないのはこの1機種だけではなく、不特定多数で発生していた模様。
    最初はプレビューサイズの計算がおかしいのかと思っていたが、座標のLogをとってみても正常で、
    にっちもさっちもいかなくなってしまった。

    直近で思い当たることといえば、テキスト表示を「drawTextOnPath」を使って書いてることだけ…。
    ・・・それか?


    ということで、調べてみると、
    ※参考サイト Android:ハードウェアアクセラレーション
    ハードウェアアクセラレーションを有効にすると、特定の2D描画が無効になるらしい。
    drawTextOnPath()とか、drawPicture()とか。

    いやしかし、それ別に有効にしたつもりもないんだけど…と思いつつ、下記のようなコードで
    日付テキストのviewだけをハードウェアアクセラレーションを無効にしてみる。


    こんなんで動いたら世話ねーよw、とおもいつつテストしてみると、





    20131008_001.png
    でました (;´∀`)


    え?なんで?
    ということは、機種ごとにハードウェアアクセラレーションのデフォルトの設定が違うってこと?
    やめてそーいうのw




    スポンサーサイト








    Androidで画像の方向(向き)を取得する(2)



    ■ExifInterfaceで取得した情報で画像を回転

    前回のおおざっぱな説明で、とりあえず現在の画像の方向を取得しました。
    で、「取得したはいいけど、Orientation の0とか1って結局どっちむいてんの?」
    と疑問な人はここを読もう↓
    http://blog.romatica.com/2011/04/04/air-for-android-cameraui-exif/
    「F]の字で画像の向きを表現してる。実に分かりやすい。


    で、前回の続きでコードを書いてみよう。


    結局、getExifString(exifInterface, ExifInterface.TAG_ORIENTATION)で取得した
    情報をもとにif文で振り分けてるだけだけどね。スマートじゃないね。まいいか。

    このif文の振り分けではまったのが、最初は、

    if(exifStringR.equalsIgnoreCase("6"))

    てやってた。そしたら全然回転してくんなかった。
    ムキになってログとかとって穴があくほど調べてたら、"6"は

    "Orientation: 6"

    で1セットということに気が付き昇天しました。
    おいおい、数字だけにしとけやってところですよ。いらん文字列つけんなって話ですよ。

    画像の回転はMatrix使ってごくごく普通にやってください。






    Androidで画像の方向(向き)を取得する



    ■ギャラリーから呼び出す画像の向きを取得する

    開発中にこんなことはないだろうか。
    「ギャラリーから画像を呼び出したは良いが、機種によって縦横の方向が
    バラバラやんけ!!」
    そう、こんなことが稀に良くある。(どっちだ)

    そんな悩めるあなたに、というか悩んでた自分用にメモです。
    画像の向きを取得して、どの機種で読み込んでも同じ方向にする方法は以下↓

    ■1.呼び出す画像のFilePathをゲット
    ■2.ExifInterfaceで画像のTAG_ORIENTATIONを取得
    ■3.ゲットしたORIENTATIONをもとに、画像をぐるぐる回転

    どうだろう、そんなに難しい手順じゃない。調べるのに半日かかったけど、
    知ってしまえば大丈夫だ!
    (ちなみに上記手順は僕が勝手に調べた方法なので、もっと簡単な方法がある
    可能性が高いので、あれば教えて下さい)

    じゃあ、まずは■1.呼び出す画像のFilePathをゲットから



    特にニーズを無視して、いきなりコードを書きました。
    上記はIntentで画像をゲットするときのonActivityResultに書いたものです。
    なので、Intentで渡されるdataをもとにしています。
    参考サイト:http://www.android-navi.com/archives/android_1/_uri_path/

    「c」がFilenameとなります。
    ↑に続いて↓で ■2.ExifInterfaceで画像のTAG_ORIENTATIONを取得、をする。


    参考サイト:http://techbooster.jpn.org/andriod/multimedia/3098/
    ↑サンプルコードは必見

    1.で取得したCをもとに、ExifInterfaceでfilenameをゲットしています。
    そしてそのファイルの情報をgetExifStringメソッドでジャンジャン取得してログに表示してます。
    getExifStringメソッドは一部抜粋なので参考サイトをちゃんと読んでね。ためになるよ。
    (exifStringRは画像回転用に自分で作ったただのString変数です)

    ここまで来たら、画像に関する情報は取得できるので、あとはそれをもとに
    画像を回転させるだけです・・・だけです。なんだけど、そこでも結構ハマったのでそれは次回。






    カテゴリ
    検索フォーム
    メールフォーム

    名前:
    メール:
    件名:
    本文:

    お世話になっている書籍達




















    リンク



    最新記事
    月別アーカイブ
    最新コメント
    プロフィール

    yukinori110

    Author:yukinori110
    Androidってなに?Javaってなに?というレベルから勉強してます。