最初はGoogleMap上にあるバス停をタッチしたらAlertdialogにバス停名ではなく、バス停の画像を表示させようと考えていました。しかし、Alartdialogにアイコンとして小さな画像を表示することは可能だったのですが大きな画像を表示する方法が分かりませんでした。・・・なので、諦めました!!
*バス停の画像が全バス停分が無いという問題もあり
今回、バス停案内アプリとして各バス停周辺を360度画像を使って表示する。新たなクラスを作成し、カメラで撮影した360度画像をImageViewで表示しようと試みましたが・・・
エラー発生
ただ画像を表示させるだけなのにエラーが出てくるため原因がよく分かりませんでした。そこで試しにこのようなプログラムを作成してみました。
ボタンを4つ配置し、それぞれのボタンを押すことで対応した画像を表示するというプログラムです。以下にその動作させたときの画像です。
動作させてみた動画
見ての通りきちんと画像が表示されています。この画像はパソコンに元々のサンプル画像を使用しています。次に360度画像に差し替えて表示させます。
結果 1枚目のみ表示可能切り替えのボタンを押すと エラーにより強制終了(どのボタンをどの順番でも同様)
さらに試しにカメラで撮影したバス停画像を1枚だけ表示させます。
1枚だけの表示なら動作しました。
サンプル 759KB
360度画像(カメラ) 1212KB
imageviewに対して大きな画像を何度も読み込ませると処理するメモリ不足によってエラーが発生する。同時にインストールに掛かる時間も大きく増加する。
このため、ImageViewに直接画像を添付しておく方法は最も簡単だが、不採用となった。
サーバーから読み込む
画像を全部プログラムに組み込むとインストールに時間も掛かりエラーも起こす。そのため、画像を全てサーバー側に預けそこから画像を読み出して表示する。
サーバーからの読み込むプログラムはこちらから
→ http://d.hatena.ne.jp/sharakova/20110917/1316236094
ファイルをダウンロードし、そのままプログラムに組み込むだけで動作することが出来ます。後は前回の時刻表の表示の時に利用した(intent)とif else文を使いボタンを押したときに表示したいバス停を受け取り、条件分岐させることで対応した画像を表示可能です。
追加
360度画像なのだから指でスライドさせたい
横スクロールを使って実現しました。
書籍でも縦のスクロールは使いましたが実は横のスクロールも実装可能です。
縦:「ScrollView」
横:「HorizontalScrollView」
こちらを使うことでスライドが可能です。同時にAndroidが画面に画像全てを表示することが無くなるため画像も大きく見やすくなりました。
Picture.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/HorizontalScrollView">
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<jp.sharakova.android.urlimageview.UrlImageView
android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
戻る
|