カテゴリー: Android

お・ぼ・え・が・き (´-人-`)

テキスト幅の取得

テキストの描画(FontMetrics)

【Android】SurfaceView上でCanvasに描画する文字列の幅を取得する

最初はreturn fontMetrics.descent-fontMetrics.ascent;にしてたけど、

bottom
The maximum distance below the baseline for the lowest glyph in the font at a given text size.

descent
The recommended distance below the baseline for singled spaced text.
Paint.FontMetrics | Android Developers

ということなのでfontMetrics.bottom-fontMetrics.top;にした。

こんな感じでいいのかな?

public float getTextWidth(String string){
	Paint paint = new Paint();
	return paint.measureText(string);
}

public float getTextHeight(String message) {
	Paint paint = new Paint();
	FontMetrics fontMetrics = paint.getFontMetrics();
	return fontMetrics.bottom-fontMetrics.top;
}

お・ぼ・え・が・き (´-人-`)


Suspicious method call

eclipseで”Suspicious method call”が出たら、@SuppressLint(“WrongCall”)を
つけたり”Clear All Lint Makers”(リント警告の消去)等をすれば良いが、そもそも
on~というメソッド名を使用しなければ良い(´・ω・`)?
wrongcall

Androidでいきなりエラーが出るようになりました。


LogCatへの出力

Log.e(String title,String message);

という形で指定するらしい。
errorの場合は”e”、infoの場合は”i”という風にレベルを変えるみたい。

Androidでデバッグログを出力する方法


アクティビティーの画面方向の固定

AndroidManifest.xml内の<activity>タグの属性に

android:screenOrientation="portrait"

という風に追加する。横固定ならlandscapeを指定する。
当初、sensorとunspecifiedの違いが今ひとつわからなかったが、
これはシステムの方で自動回転を有効にしていたからだった(ノ∀`)
システム設定に依存せずにアプリというかアクティビティーを
自動回転させたい場合はsensorにしろということか。

方向のみ固定で傾きによってその方向にのみ反転するのはどうするんだろうか?
プログラム的にやれるのかな?

画面の向き(ScreenOrientation)


s2.8 障害物を作る.2のDiagramCalcrクラスに
isHitメソッドが足らなくてエラーになる。→取り敢えず追加すればいい。

というよりもisHit、isHitLCがCollision、CollisionLCになってるくさい。


そのまま実行したらエラーになった。”_type”がnullの為、switchのところで
NullPoになっているみたい。

if (conf != null) {
			_rotaSpeed = conf.speed; // 回転スピード
			_type = conf.type; // 物体のタイプ
		}else{
			_type =Barricade.eType.OUT;
		}
		switch (_type) {

コメントで”// コンフィグを特に設定しない時はnullを渡すとデフォルト設定になる”と
あったが、BarricadeSquareはBarricadeをそのままnullを渡してしまうのでエラーになる。

protected eType _type = Barricade.eType.OUT;

if (conf != null) {
  _rotaSpeed = conf.speed; // 回転スピード
  _type = conf.type; // 物体のタイプ
}else{
  _type =Barricade.eType.OUT;
}

という風にしないといけないような気がする(´・ω・`)

appcompat_v7の除去(´・ω・`)?


追記20150115
久しくAndroidプロジェクトを新規作成していなかったので気付かなかったけど
最新版だと”appcompat_v7″プロジェクトが自動増殖しないみたいなので、
他にこれを利用するプロジェクトがある場合は”appcompat_v7″プロジェクトを
削除しては駄目(´・ω・`) fragment周りはなくなってる気がする…


appcompat_v7絡みを取り除く手順。
正しいのかどうかわからないのでこちらでのみ載っける(ノ∀`)
これはアクションバーを使用しないようなゲームサンプルを勉強する時に
余計なコードが入ってると「わけわかんねーよ、バーヤ、バーヤヽ(`Д´)ノ」と
怒りだしてしまうような俺氏みたいな初心者向けの手順。
或いはサポートライブラリを入れたくないけど非力なPCを使っているが故に
APIレベル14以上のエミュレータがまともに動かなかったりする人向け (ヽ’ω`) ワイノコトヤ

適当に画面スナップを撮ったので、もしかすると手順に無駄とか手違いがあるかも(ノ∀`)


※作成したプロジェクトが”test”、削除したいappcompat_v7フォルダが”appcompat_v7″の場合

  1. “appcompat_v7″フォルダを右クリックし、コンテキストメニューが表示されたら<削除>をクリック。
    delete-01
     
  2. チェックを入れて<OK>をクリック。delete-02
     
  3. “test”フォルダを右クリックし、コンテキストメニューが表示されたら、[プロパティ]をクリック。
    delete-03
     
  4. 「~のプロパティ」画面が表示されたら、左ペインで[Android]を選択し、「ライブラリ」セクションで削除するライブラリプロジェクトを選択し、<除去>をクリック。除去されたら<OK>をクリック。
    delete-04
     
  5. 各valuesフォルダ内のstyles.xml、menuフォルダ内のmain.xml、layoutフォルダ内のfragment_main.xmlファイルを削除。styles.xml、main.xmlはそれぞれファイル内のタグを削除すればエラーは消えるような気もするけれども面倒臭いのでファイルごと削除してる(・∀・) fragment_main.xmlも邪魔くさいから削除。
    delete-05
     
  6. MainActivity.javaをダブルクリック。
    delete-06
     
  7. import文、extends文の”ActionBar”部分、コードの一部を削除。
    delete-07
     
  8. “Activity”用のimport文を追加。
    delete-08
     
  9. onCreateOptionsMenuメソッド、onCreateOptionsMenuメソッド、PlaceholderFragmentクラスを削除。
    delete-09
    delete-10
     
  10. AndroidManifest.xmlファイルを開き、<Application>タグ内の”android:theme=”@style/AppTheme”“を削除。
    delete-11
     
  11. MainActivity.java内に”import android.R;”が存在していたら削除。
    delete-12
     
  12. “test”プロジェクトを右クリックし、コンテキストメニューからビルドパスの構成を開く。delete-13
     
  13. 「ライブラリ」タブを開き、”Android Private Libraries”を選択して<除去>をクリック。
    delete-14
     

という手順で空っぽに近くなるような気がする( ・`ω・´) チガッタラゴメンナサイ

“appcompat_v7″フォルダの自動作成ってバグなの?仕様なの(´・ω・`)?

追記20150115
久しくAndroidプロジェクトを新規作成していなかったので気付かなかったけど
最新版だと”appcompat_v7″プロジェクトが自動増殖せずに同じものを参照する
ようなのでこの手順は不要の筈。


ここでのやり取りを見ると仕様のようだな… (ヽ’ω`)
https://code.google.com/p/android/issues/detail?id=66975

The templates are frequently updated, so in the future we may create a template version that does not use AppCompat at all.

とか言ってるし。

他の事をやっていて気が付かなかったが、このアップデートでサポートライブラリの
インポートやActionBarActivityをデフォルトで使用するようになってたんだな。

v7絡みではもう意味はなくなったが、手順の説明としては何らかの意味はあるので
公開しとく (ヽ’ω`)
サポートライブラリのダウンロード
リソースを含むサポートライブラリの追加


appcompat_v7絡みでぐぐっていてヒットしたエントリで増え続けるライブラリプロジェクトへの
対処として、その参照を変更して増えたプロジェクトを削除する案があった。
日々雑感、覚書: Androidアプリ開発:ADT eclipseの更新-appcompat_v7プロジェクトが勝手に作られる!?

一応その手順のスナップショットは取ったが、果たしてこれでいいのか(運用的にw)
よくわからないのでこちらでのみ適当に載っけておこうw
これはインポートしたサポートライブラリへ変更しているけれども、
“appcompat_v7″でも問題はない模様。

  1. 該当のプロジェクトを右クリック。
    appcompat_v7-001
  2. 表示されたコンテキストメニューから[プロパティー]をクリック。appcompat_v7-002
  3. 参照しているライブラリを選択して<除去>をクリックappcompat_v7-003
  4. <追加>をクリック。appcompat_v7-004
  5. 任意のライブラリプロジェクトを選択して<OK>をクリック。appcompat_v7-005
  6. <OK>をクリック。appcompat_v7-006
  7. 不要になったプロジェクトを削除。appcompat_v7-007
  8. チェックを入れて<OK>をクリック。appcompat_v7-008

一応これで大丈夫そうだけども、どうなんだろうか(・∀・)?


一回ダウングレードに成功したんだけれども、その後は何度やってもうまくいかない(´・ω・`)
Eclipse4.2のPluginのuninstallではまったのでメモ
書いてあったようにプラグインをeclipse上でアンインストールし、プラグインを削除し、artifacts.xmlから該当部分を全部削除してfeatureの方も削除したのに、
アーカイブで22.3を入れようとすると”Android 開発ツール”だけが
「最新版がインストールされているので無視されます」みたいな表示が出る…(ヽ’ω`)

まあこれはもういいかw


アクションバーとの奮闘で一ヶ月を浪費してしまった気がしないでもない…(ヽ’ω`)
ちょうどアップデートとぶつかったのが混乱が長期化した原因であった…_| ̄|○

あれ…コンソールでxmlのリソースエラーって表示されてたのか…今まで気付かなかった…_| ̄|○