カテゴリー: 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;
}

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


SurfaceViewへの描画サンプル

画像ではない直接描画
Androidプログラミングの館修正すべき箇所

Canvas#drawBitmapでのBitmapの静的描画。drawableリソースの読み込み。
SurfaceViewで高速描画する(1)
Threadを利用したBitmapの動的描画。
SurfaceViewで高速描画する(2) 処理落ちを考慮したタイマ処理

Viewへの描画だが、予備知識として。
グラフィックス(1)-Viewクラスへの描画

onTouchEventとの併用
グラフィックス(2)-SurfaceViewによる描画

クラスやインターフェイスが分かれているので、ちょっと面倒くさいかも。
Androidの勉強ページ

BallInof.java→BallInfo.java

SampleCanvasThread.javaで以下を追加。他にもなんか修正した…かも?

ArrayList<BallInfo> ballList = null;
public float screenWidth;
public float screenHeight;
public SurfaceHolder holder;

eclipseのウィザード関連

まだ完全ではないが概ね理解した …

ような気がするが目的まではまだだから取り敢えず覚書…
頭の中、パンッパンッやで…(ヽ’ω`)


ViewPluginが存在しなくてエラー。画像を返せば良いようだが、取り敢えずそこでストップ。
リスト3 file→element
作って覚えるEclipseプラグイン(2):ツリー表示プラグインを作成する (1/2)


テンプレートを利用する場合
Eclipse ウィザードを使って開発を高速化する

テンプレートを利用しない場合
Building an Eclipse Plug-in Project Wizard Linux Sagas

natureの登録まで
プロジェクトの特徴付け(Natureの付与)を行う

ネーチャー、ビルダー関連
プロジェクト・ネーチャーの定義方法: Eclipseプラグイン開発
新規ビルダーの定義: Eclipseプラグイン開発
Natureの作り方
Builderの作り方
eclipse plugin > java based project, how to – Stack Overflow

読み途中
Eclipse JDT tutorial – Java Model – Create, Access, Load Projects
Eclipse JDT – Abstract Syntax Tree (AST) and the Java Model – Tutorial

それほど詳しく読んではいないが理解の助けになったり、ずばりそのものらしきものが
書かれているようだが英語やサンプルが難解なので取り敢えず後回しにしてるもの(ノ∀`)
Eclipseプラグイン開発メモ(Hishidama’s Eclipse Plugin develop Memo)
独自の Eclipse プラグイン・テンプレートを作成する
FrontPage – きのさいと
Writing an Eclipse Plug-in (Part 4): Create a Custom Project in Eclipse – New Project Wizard: the Behavior | Hidden Clause
Computing Reality: Creating a Plugin Project Plugin Project Wizard
Eclipse Plugins Exposed, Part 3: Customizing a Wizard – O’Reilly Media
Eclipse Corner Article: Creating JFace Wizards
2.3 Reviewing the Generated Code | A Simple Eclipse Plug-in Example | InformIT

Composite

他のコントロールを含むことが出来るコントロールであるこのクラスのインスタンス
Instances of this class are controls which are capable of containing other controls.
Help – Eclipse Platform

Compositeは各種ウィジェットのスーパークラスであり、 SwingのJPanelのように、他のウィジェットのコンテナとして使用することができます。
Composite – SWTサンプル集

swt.null

nullは正確にはレイアウトではなく、レイアウトをセットしないということです。

 レイアウトデータとは、レイアウトにCompositeクラスを載せて自動的に配置するときに、配置のされ方を微調整するためのデータをセットするクラスです。
SWTレイアウトを活用しよう


主な流れ

  1. eclipse SDKやeclipse platform SDKを「新規ソフトウェアのインストール」でインストールする。
  2. eclipseで新規ウィザードを作るにはプラグイン・プロジェクトを利用する。テンプレートを利用しない場合はINewWizard等を使って構築する。
  3. 「org.eclipse.jdt.core.JavaCore」等を利用する為には必須プラグインの設定する。(org.eclipse.jdt系のjarを全て)
    How can I import eclipse JDT classes in a project
    Eclipseプラグイン マニフェストエディターメモ(Hishidama’s Eclipse Plugin MANIFEST Editor Memo)
  4. 設定項目や挙動はWizardPageのcreateControl()等に書いて、それをWizardにaddPage()していくらしい。この辺は特に触ってないので詳しくは不明(ノ∀`)
  5. WizardのperformFinish()で実際のプロジェクト作成のコードを書く。IFolderやらIClasspathEntryを使う
  6. IProjectDescription(プロジェクトの設定?)にnature(プロジェクトの特徴・方向性?)する。
  7. natureにbuilderを設定する。

という感じでやっていけば取り敢えずは良さそう(・∀・)

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


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
     

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