タグ:android ( 37 ) タグの人気記事

バグFIXに二日もかかるとは。

今作っているAndroidアプリで、原因不明のバグ発生中。

シーン切り替え時に、一瞬画面が消えて、元の画面が出て、
それから新しいシーンになるというもの。

この一瞬消える原因が分からなかった。

が、実は一瞬消える方は正しくて、元の画面が出る方が間違い。

描画は2Dオンリーなので、SurfaceViewを使用している。
lockしたcanvasを渡しているだけで、特殊な設定は一切していないのだが、
標準でダブルバッファになっているらしい。

消えた後に元の画面が出るのは、このダブルバッファをクリアしていないためだ。

lock,unlockを使っているのに、内部はダブルバッファ?

うーむ。
[PR]
by miries | 2012-12-05 11:35 | Android

回転入力はやめ!

せっかく作ったんだけど、今回のアプリには不向きなので、
スライダー入力に変えてしまった。

新規にグラフィックから書き起こしたけど、なんとか1日でできた。
とはいえ作り直しなので、アプリの完成までのマイルストーンは変化せず。
まだまだ先は長い。
待っている人がいたらごめんね>いるのか?

…としかし、今触ってたら、やっぱりスライダーも合わないわ。
どうすっかなぁ。

いやあ、この入力操作周りはやっぱりこだわるわー。
ゲーム本編よりもよっぽどこだわってる。

せっかくのタッチパネルなので気持ちよく操作したいし、
私のポリシーとしては、やっぱり「片手モード」ってのはつけたいからなぁ。
[PR]
by miries | 2012-10-19 22:56 | Android

Androidあぷり

あ…ありのまま 今 起こった事を話すぜ!

『Android-SDKのバージョンを上げたら
eclipseが起動しなくなった』

な… 何を言ってるのか わからねーと思うが
おれも何をされたのかわからなかった…
頭がどうにかなりそうだった…
不具合だとかバグだとか
そんなチャチなもんじゃあ 断じてねえ

もっと恐ろしいものの片鱗を味わったぜ…


----
あ、eclipse界じゃ結構メジャーなスタンド能力なのか。

http://android2010.seesaa.net/article/265330785.html

eclipse.exe -clean.cmdを実行するだけでOKだとは。

うちのもこれで治りました。
[PR]
by miries | 2012-10-17 23:19 | Android

回転入力を作ってみた。

ドラッグなどの標準操作と、スマフォ特有のフリック入力やピンチ入力を実装した。

というわけで、次に必要になる回転入力を作ってみた。

画面上にジョグダイアルが表示されて、画面上で指をくるくるとドラッグすると、
ジョグダイヤルも回る。

ジョグダイヤル上でまわす必要はなく、画面上どこでまわしても、
まわす半径が大きくても小さくてもOK、逆回転もできる。

意外に楽にできた。

どこに必要な操作かというと、アイテムの購入数とか、
数字を入力する必要がある部分で使う。

コンシューマーゲーム機だと、左右キー押しっぱなしでリピート入力すればいいんだけどね。

スマフォ系はタッチ間がないので、できるだけ指を動かす、
そして、画面上どこでも入力してもOK、というコンセプトで作成中。

できれば指一本で操作させたいところだけど、
ピンチ操作が非常に便利なんだよなー。
[PR]
by miries | 2012-10-06 00:32 | Android

surfaceViewの不具合?

Androidでカメラアプリを作ったわけですが、原因不明のバグに襲われている。
これだけ先人がいるのに、同じ不具合がググっても出てこないのは、
私が、よほど、アホな作りをしているということか…?

というわけで、誰かヘルプ。
↓以下、その現象。

----
SurfaceViewを2枚重ねて表示している。
下層がカメラのプレビュー、上層をGUIの描画に使用している。
タッチの処理などは、上層で処理。

上層で、カメラのプレビューをOFFにできる機能をつけている。
異なるVIEWからの操作が色々と面倒なので、
上層で、プレビューOFFにされたら、Activityから、
下層のsurfaceView自体を、
setVisibiliry(View.INVISIBLE);
で不可視にしている。

上層⇒Activityもスレッドが異なるため、handlerを使用している。
可視/不可視を処理するメソッドが、これだ。
----

public void setCameraPreview(boolean f) {
if ( f ) {
sv2.setVisibility(SurfaceView.VISIBLE);
} else {
sv2.setVisibility(SurfaceView.INVISIBLE);
}
Log.d("APP LOG", "F:"+ f);
}

----

で、これが問題なく動作するのだ(おいおい
じゃあ何が問題なんだよ、と言うと、だな。

一度「バックキー」などで、アプリを終了させたあと、もう一度起動すると、
このプレビュー切り替えが動作しなくなるのだ。

注目すべきは、処理スレッドのログ。
きちんと、true,falseが表示されているのだ。
つまり、ココの処理までは来ているということだ。

初期プレビューは表示されているため、
再起動時のsurfaceView sv2の初期化に失敗しているというわけでもなさそうだ。
setVisibility()メソッドが、何らかの理由で反応しないのだ。

ホームキーやバックキーでアプリを終了した際、完全に終了するわけではなく、
プロセスは残っている。
このプロセスを殺してから、再起動すると、プレビューは正常に切り替えられる。

いわゆるサスペンド状態のときに、何か不具合を起こしているのだろう。
一日潰したが原因が分からないので、
面倒でパスしてた、異なるViewからの操作で、直接camera.stopPreview();を呼び出しをやってみるわ。
[PR]
by miries | 2012-09-28 12:05 | デジタル系

カメラ撮影とビュー

ようやく、カメラで撮影する機能を使ったアプリが動いた。

ちなみに今作っているゲームアプリには全く関係がなく、
単にAndroidの機能をテストしたかっただけ。

すでに先人が色々なテスト結果を記録・公開してくれているので、
割とすんなりできた方だろう。


というわけで、いくつか躓いたポイントを備忘録として書いておく。

○SurfaceHolderのタイプは、SURFACE_TYPE_PUSH_BUFFERSで無いとエラー。
 カメラのプレビューを表示するためには、この設定じゃないとダメなのだが、
 この設定はCanvasがリードオンリーになってしまう。
 なので、プレビューの上に何か描いたりすることができない。
 (この設定は、Android3.1で廃止になったらしいが…)

 これを回避する方法が少なくとも2つある。

○SURFACE_TYPE_NORMALを使う
 これで描くことができるようになるらしい。
 のだが、プレビューで取ってこれる画像データが、
 そのままでは使えないヘッダなしの生データらしく、
 使うためには変換をかまさないといけないとのこと。
 変換メソッドを公開してくれている人もいたけど、面倒なのでパス。

○SurfaceViewを重ねる
 一番下にカメラのプレビューを置き、その上に自由に描けるビューをおけばいいじゃん。
 ということで、2重ビュー方式を採用。
 「ビューを重ねることは、やってはいけないらしい」という記述も見かけたが、華麗にスルー。
 できるんだからいいジャン。

 が、ここでも、問題は発生。
 カメラのプレビューは決められたサイズを設定しないとエラーで落ちる。
 この決められてサイズに、端末の液晶サイズがあるとは限らないのだ。
 その場合、カメラのプレビューは、画面サイズに合わせるため、
 引き伸ばされたりして、実際の景色とは異なる画角になる。
 そこに画像を合成したら、プレビューとは異なる合成になってしまった。

 仕方が無いので、少し小さめのプレビューにして、余白は黒で塗りつぶし、
 プレビューと撮影の画角を合わせた。

 ここまでくれば出来たも同然なのだが、最後に1つ。
 上に重ねるビューは、背景が透明でないとダメなのだが、
 一度何か描くと、透明に戻らないのだ。
 合成する画像を切り替えていくと、画面にだんだんゴミが残っていくのだ。
 これも、先人の解説で解決。
 透過色で塗りつぶす際の、引数を省略せずに設定する必要があるそうだ。

 c.drawColor(0 ,android.graphics.PorterDuff.Mode.CLEAR );

 これで、透明色でクリアできた。
 完璧。
[PR]
by miries | 2012-09-27 12:16 | Android

SH-03Cとroot

F-10Dを購入したため、アンドロイドアプリ開発専用機と化しているSH-03C、
通称LYNX。

去年の10月辺りに公開された最新のアップデートを適用すると、
root化できなくなった、という話題をどこかでみた。

アンドロイド端末で、よくroot化の話題がでるが、実は具体的にはよく知らない(笑)
root化すると、普段はセキュリティ上みることができない、
Google Playで購入したアプリのapkファイルを見れたり、
プリインストールされたアプリの削除を行えたりなど、色々できるようになるらしい。

この、プリインストールの削除、というのが非常に良い。
SH-03Cにプリインされている、pmailとかいうやつ、まったく使ってないのに
常時起動していて、なおかつ頻繁に「強制終了しました」とか出てむかつくのだ。

自分で開発しているアプリをプレイしているときに「強制終了しました」と出たので、
どこにバグがあるんだろう…と、よく見たら、pmailとか書いてるし。

そんな中、今日気づいたのだが、アンドロイドSDKに標準でついている、
DDMSツール。
これを使うと、実機の中にあるファイルを確認できるので、デバッグにしようするわけだが、
system/app
というフォルダに、.apkファイルが大量に入っているのをみつけた。

konami_golf.apk

おい、これプリインアプリのAPKファイルなんじゃ…。
自分で購入したアプリは、/data/data/~ に保存されるのだが、
そこは見れないようになっていた。

でも、プリインは見えるところに入っているのかよ。
とりあえず、PCに転送して、解凍できるところまでは確認した。

…削除してぇ…。
ここで削除しても大丈夫なのか?
消して幸せになれるのだろうか?
[PR]
by miries | 2012-09-20 01:48 | デジタル系