ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2014年2月26日水曜日

Bitmapを綺麗に表示させる

Bitmapを拡大縮小して描画すると、画像が汚くなってしまうことがある。そのような場合、PaintクラスのsetFilterBitmapメソッドを実行すると、画像が綺麗に表示される。
Paint p = new Paint();
p.setFilterBitmap(true);
ただし、この処理は若干重いので、大きな画像を扱ったり、大量の画像を扱う際には気をつけよう。

3000x3000のBitmapに、この処理を加えると、はっきり遅延を体感できる。Androidでそんなに大きな画像を扱うのがそもそも問題だけどw

2014年2月21日金曜日

Eclipseの文字コードをUTF-8に変更する


Window -> Preference -> General -> Workspace -> Text file encoding

いつも忘れるので、ここにメモしておく。

特に理由が無い限りUTF-8にしておくのが無難。

2014年2月7日金曜日

アプリのバージョン情報を取得する

自分のアプリのバージョン情報を取得するには、Activity内に以下のようなコードを書けばよい。
try {
  PackageManager packageManager = getPackageManager();
  PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), PackageManager.GET_ACTIVITIES);
  String versionCode = packageInfo.versionCode;  // バージョンコード
  String versionName = packageInfo.versionName;  // バージョン名
} catch (NameNotFoundException e) {
  e.printStackTrace();
}

2014年2月3日月曜日

わかりやすいAndroid NDK導入手順 2014年版

AndroidでNDKを利用する手順について調べてみました。NDKについての解説記事はたくさんありますが、情報が古くて、そのままだと使えないことが多かったので、現時点での僕が試した方法について説明します。

まずは準備から。

今回使用した開発環境は、Windows7 64bit、JDK1.7.0、ADT(v22.3.0-887826)です。Android SDKのAPIレベルは、最新版の19を使用しました。

コマンドプロンプトからjavahコマンドを実行できるように、あらかじめJDKへのパスは設定しておいてください。パスの設定はこちらが参考になります。

http://www.javadrive.jp/install/jdk/index4.html

まずは、NDKのダウンロードサイトから、NDKのWindows 64bit版をダウンロードします。

http://developer.android.com/tools/sdk/ndk/index.html

android-ndk-r9c-windows-x86_64.zipというファイルです。

ファイルをダウンロードして、解凍したら、C:\ndkというディレクトリを作って、そこに入れてください。場所は任意ですが、ここではわかりやすいように、実際に僕が利用している環境を記します。

C:\ndk\android-ndk-r9c-windows-x86_64\android-ndk-r9c

という場所にNDKが入りました。

次に、ADTを起動して、[Window -Preference]の[Android - NDK]という設定画面を開いてください。


NDK Location

C:\ndk\android-ndk-r9c-windows-x86_64\android-ndk-r9c

と入力して、OKを押して、設定画面を終了してください。

これで設定は完了です。

2014年2月1日土曜日

WebViewを含んだActivityを終了するときに、Window Leakedエラーが発生する

WebViewを含んだActivityを終了するときに、こんなエラーが発生してた。
02-01 13:14:50.958: E/WindowManager(738): android.view.WindowLeaked: Activity com.fb.fumotrim.ui.FStorageActivity has leaked window android.widget.ZoomButtonsController$Container{426b0148 V.E..... ......I. 0,0-1280,65} that was originally added here
どうやら、ズームボタンを有効にしている際に起きるようで、WebView設定のsetBuiltInZoomControls(true)を設定していると、エラーメッセージが出るまではわかった。調べてみると、同じような症状がstackoverflowにあった。もう、stackoverflow先生に足を向けて寝られないw

http://stackoverflow.com/questions/11889562/webview-with-builtinzoomcontrols-throwing-exceptions-and-crashing

ActivityのonDestroyをオーバーライドすると、エラーが出なくなった。
@Override
protected void onDestroy() {
 setVisible(false);
 super.onDestroy();
}
どうしてこうなるかはよくわかってないけど、直ってよかった(^^;)

2014年1月30日木曜日

Toastをキャンセルする

Toastを連続で表示させると、前のToastが消えるまで、新しいToastが表示されないので、Toastの渋滞が起きる。解決するには、下のようなコードをActivityに記述すると良い。
private static Toast t;

public void toast(String message) {
 if(t != null) {
  t.cancel();
 }
 t = Toast.makeText(this, message, Toast.LENGTH_LONG);
 t.show();
}
参考元:
http://stackoverflow.com/questions/6744147/cancelling-an-already-open-toast-in-android

2014年1月27日月曜日

Perlin Noise Generator

Perlin Noiseについて勉強しようと思ったので、技術検証用にアプリも作ってみました。ダウンロードは下のリンクから!

Android app on Google Play


このようなPerlin Noise画像を作成できます。作成した画像(png)の送信もできます。処理時間もわかるので、簡単なベンチマークにも使えます。


MenuのPreferenceから、画像サイズ、オクターブなどを調整できます。


Perlin Noiseに関して参考にしたサイトはこちら。

Perlin Noiseについて
http://freespace.virgin.net/hugo.elias/models/m_perlin.htm

参考にしたコード。C#はJavaとそっくりなので簡単に移植できた。
http://devmag.org.za/2009/04/25/perlin-noise/

3D版。今回は使っていないけど、そのうち使ってみたい。
http://mrl.nyu.edu/~perlin/noise/

2014年1月24日金曜日

targetSdkVersionを19にすると、Preference画面で強制終了する

Android Manufestのandroid:targetSdkVersionを19にすると、Preference画面を開いて操作しようとすると強制終了するようになった。調べてみると、これが原因らしい。
The default result of {android.preference.PreferenceActivity#isValidFragment PreferenceActivity.isValueFragment} becomes false instead of true.
引用: http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#KITKAT

エラーメッセージをよく見るとこんな行があった。
01-24 00:35:10.461: E/AndroidRuntime(29584): Caused by: java.lang.RuntimeException: Subclasses of PreferenceActivity must override isValidFragment(String) to verify that the Fragment class is valid! com.fb.fumotrim.ui.FTPreferenceActivity has not checked if fragment com.fb.fumotrim.ui.FTPreferenceActivity$PF_System is valid.
PreferenceActivityのサブクラスを作る時は、isValidFragment(String)をオーバーライドして、PreferenceFragmentがvalidかどうか検証すれよってことだ。
それで、どうやって書けばいいかと調べていたら、stackoverflowに書いてあった。流石stackoverflow!

http://stackoverflow.com/questions/19973034/isvalidfragment-android-api-19
protected boolean isValidFragment (String fragmentName)
{
  if(StockPreferenceFragment.class.getName().equals(fragmentName))
      return true;
  return false;

}
こんなかんじの内容にすれば良いらしい。フラグメント名をチェックするだけ。proguardを使っている場合は、クラス名の比較に失敗するようなので、proguard.cfgに以下のような例外を追加すると良い。
-keep public class com.fullpackage.MyPreferenceFragment

2014年1月23日木曜日

Fumotrim 1.7.2



Fumotrim 1.7.2を公開しました。

今回は、タッチ操作の改良と、アイソメトリック図のバグ修正と、パラメーター設定機能の追加がメインです。パラメーター設定機能はフルバージョンのみです。

ブロック長押しがしにくいのと、ズーム時にカメラがブレる問題があったので修正しました。これで操作が以前よりも快適になるはず!タッチ操作は、APIにあまり頼らずに、自前で実装しているので、初歩的な不具合が多かった...

アイソメトリック図は、面の前後判定にバグがあったので修正しました。さらに、前後判定アルゴリズムを見直したので、以前よりも描画が高速になりました。

Preferenceから、イメージのサイズ、アンチエイリアス、ボーダーの有無などを設定できます。



イメージのサイズは、当初10,000まで対応しようと思っていたのですが、端末の処理速度的に厳しかったので、3,000までに制限しました。

新しいアイソメトリック図の描画システムを使って、プリミティブ一覧ページも更新しました。

http://fumotrim.net/fumotrim/primitive-generator


2014年1月21日火曜日

Isometric Image その4 UI作り

Fumotrim 1.7.2に向けて、アイソメトリック図の描画オプションを作成中。ただ動く物を作るだけなら簡単だけど、使いやすいUIを1から作ろうとすると、なかなか大変だった。Androidには本当に基本的なUI部品しか無い...


数値入力と、色入力のプレファレンス部品を作成して、画面に組み込んでみた。クリックするとダイアログが出て、値を入力する仕組み。


数値入力ダイアログには、テキスト入力の他に、補助入力スライダーが付いている。矢印をタッチするとテキストボックスの数値が変更される。最小値、減算、加算、最大値に対応している。真ん中のスライダーは、ドラッグして数値を調整できる。


色選択ダイアログは、ここで紹介したダイアログを流用してみた。

UI部品は、一度作ってしまえば、再利用しやすいので、手を抜かずに頑張ろう!



ところで、画面を作っている途中で、SwitchPreferenceのバグに遭遇したのでメモしておく。

複数のSwitchPreferenceを使っている場合に、画面をスクロールすると、値がリセットされるという、とんでもないバグがあるようだ。

https://code.google.com/p/android/issues/detail?id=26194

コメント4のように、SwitchPreferenceを独自拡張して使うと解決できた。

2014年1月18日土曜日

戦車のモデルを公開しました


戦車のモデルを公開しました。Fumotrimから、Tools -> Fumotrim Storageを開いて、戦車のページを開くと、ロードボタンが表れるので、それを押すと、Fumotrimにロードされます。

http://storage.fumotrim.net/model/114

次期バージョン(1.7.2)の有料版では、アイソメトリック図の、解像度指定と、アンチエイリアスに対応予定です。上のような、高解像度のアイソメトリック図を出力可能です。

解像度は、幅10,000ピクセルまで対応していますが、スペックが低い端末で描画しようとすると、大変なことになる可能性があるので注意w まあ、一応検証してみようと思うけど...

アンチエイリアスの精度は、SDKまかせなので、上図のようにブロックのエッジが露出してしまいます。用途に合わせて、ご利用ください。

SuefaceViewの起動タイミング

SuefaceViewを使用する際に、SurfaceHolderのCallbackが、どのタイミングで呼ばれるのか気になったので、ちょっと実験してみた。

2014年1月17日金曜日

Androidの色選択ダイアログのデモ


Android SDKには、色を選択するダイアログが無いので、使えそうなものをネットで探していたけど、なかなか用途に合ったものが見つからなかった。というわけで去年、自分で作ってみた。一年かけて少しずつ改良したので、現在のバージョンを公開します。使用はご自由に。

RGBの値をスライダーで細かく制御可能で、モノクロにも対応しています。

http://fumobox.com/file/demo/ColorEditorDemo.zip

ソースをgithubにも置きました。こっちが最新版です。

https://github.com/fumobox/simple_color_chooser_demo

Eclipseのプロジェクトファイルになっています。Android 4.2以上推奨。

使い方は簡単。MainActivityにイベントリスナーを追加して、下のようなコードを呼び出すだけ。
ColorEditDialogFragment.show("Color", _colbox.getColor(), MainActivity.this, MainActivity.this);

2012年12月27日木曜日

TextViewのテキストを選択可能にする

TextViewのタグ内に以下の属性を入れるだけ。
android:textIsSelectable="true"
選択できるようになる。

TextViewの文字幅を揃える

TextViewのタグ内に以下の属性を入れるだけ。
android:typeface="monospace"
入れるとこうなる。

2012年11月11日日曜日

Vertex Shaderのコンパイルエラー

Vertex Shaderのコンパイル時にエラーが出たので調査。
uniform mat4 u_mvp;
void main() {
  ...
};
Sony Tabletだと、これでコンパイル通ってたけど、他の機種やエミュレーターではコンパイルエラーが出た。理由は簡単で、最後のセミコロンを外すとあっさりコンパイルが通った。機種によってコンパイラの挙動が違うんだな。

2012年9月26日水曜日

Google Play Storeの再インストール

Sony TabletでGoogle Playストアを起動しようとすると、「com.android.vendingは終了しました」というエラーが出て起動しなくなった。ネットでいろいろ調べてもよくわからかったけど、自分で試行錯誤しているうちに解決した。Sonyに再インストールを依頼すると6,000円もかかるということなので、必死になって解決法を探したw

症状の詳細

  • Google Playストアのアイコンがなぜかcom.android.vendingというアイコンに置き換わっている。
  • アイコンから起動すると「com.android.vendingは終了しました」というエラーが出て、起動しない。
  • 他から起動しても同じようなエラーが出る。
  • アプリ一覧でGoogle Playストアが見つからない。

Google Play Storeの再インストール

Windows7から、コマンドプロンプトを使って再インストールしてみました。

ストアアプリのパッケージを探してきてダウンロードする。

自分が試したときのバージョンは、Google Play Store-8014017.apk。ググればどこかにあるはず...
最新バージョンを取得すればOK。
名前にスペースが入っていたら、実行時にエラーになるので、名前を適当に変える。
例: gps8014017.apk
適当なディレクトリにファイルを入れる。
例: C:\temp\gps8014017.apk

Android SDKをインストールしてadbを実行可能にする。

Android SDKのダウンロードはこちら
Android SDK
ダウンロードしたファイルを展開し、adb.exeのあるディレクトリを、システム環境変数のPATHに追加する。

再インストール

PCと端末をUSBデバッグ接続し、コマンドプロンプトから以下のコマンドを入力する。
C:\temp>adb install -r gps8014017.apk
Successというメッセージが出たら成功です。
※この操作で何か不具合が出るかもしれないので、くれぐれも自己責任で!

2012/12/27更新

adb関連の内容がわかりにくかったので修正。現在、adb.exeは標準では入ってないようです。SDKマネージャーから取得できるようだけど、未検証です。