2011年5月11日水曜日

Touch_the_numbersをつくってみました。

正直まったくもって納得してない

理由は簡単でAndroidだとレスポンスが悪い(ぼくの作り方が悪いからだと思いたい)

とりあえずソース公開します。

bitbucketなのでMercurialです。

さくっと残った課題を書いておきます。(ちゃんとやるよっていう意思表示という意味で)
1.OpenFeint対応
本家は自前サーバーでユーザーに手間をかけさせてないのがいいところ
2.リファクタリング
正直今のmoduleの名前が気に食わないったらありゃしないので直します。
3.パフォーマンスチューニング
徹底的に上げてみます。今の実装でダメな部分なんて大量にあるのでどんどんやります。
4.ちゃんとしたstartScreenの実装
スタート画面ぐらいないとね
5.Twitter連携
モジュールはできてるのでそれを使います。

今のところこんなトコロ・・・?
ちなみにアイコン入れてないのでiOSでは悲しいことになります、はい

(画像使ってないのに3MBはライブラリが重いからですね、はい)


2010年12月12日日曜日

RoboGuiceのInject関連のソース読んできた。

ぶっちゃけぼくはGoogle GuiceをつかったことがないのでRoboGuiceのソース読んでもこんなもんなのかなーという感じにしか読めなかったわけなのだがそれなりに面白かった。
(まだ全部はよんでいない)

RoboGuiceを使うこと自体にはGuiceの知識はそこまで必要ない(Springとか触ったことあるなら)
だけどRoboGuice自体Guice使って書かれてるので中身知りたくなった時点でGuiceの知識が必要になるからこんどGuice勉強してみる。

で、Injectionの話にもどる訳なんだけどまずRoboGuice固有のInjection用のannotationを並べてみる

@InjectExtra
@InjectPreference
@InjectResource
@InjectView

この4つ

一応書いておくと
@Retension(RUNTIME) ※1
@Targer(FIELD,PARAMETER,METHOD) ※2 です。(全部)

(※1 Runtimeはリフレクションつかってアクセスできるし、クラスファイルにもアノテーションの情報が残りますよって意味です。@Overrideなんかは@Retension=SOURCEなのでリフレクションつかってアノテーションの情報を取ってくることはできないし、クラスファイルにアノテーションの情報は残りません。コンパイル時に破棄されます)

(※2 フィールド変数、メソッドの引数、メソッドにこのアノテーションが付けられますよの意味)

さて、各アノテーションの詳細を書いてきます

1.@InjectExtra

@InjectExtraはString valueとBoolean optionalという二つの値を持っています。
このアノテーションはIntentによって呼び出されたActivityで呼び出される前にputExtra()で設定された値を取り出すとき(いつもならgetExtra()するとき)に使います。

下は一例(

@InjectExtra(value = "id")
Integer id;

(前回の記事にもちょろっと書いてありますけど、@InjectExtraを使う場所は基本的にはフィールド変数に対してです、と一応 (あとの3つも同様))

これでgetExtra("id")とか書いたときとおんなじようになりました。

で、うまくいったやったーとおもって終わりかと思えばoptionalってなんだったの?ということに
で調べてみると、どうやらデフォルト値を設定するかどうかを聞いてるようです(なにもしないとoptionalはfalseになっておりデフォルト値なんてないよってことになってるみたい)

optionalを含めて使ってみた

@InjectExtra(value = "id", optional = true)
Integer id = 0;


こうするともし"id"というkeyで取得できる値がなかったら0にしといてということになる。

ついでにvalueやoptionalとかの指定は省略して下のようにも書ける

@InjectExtra("id")
Integer id = 0;


で、この@InjectExtraの仕様で気をつけることがあって持ってくる値がnullであることを許容してくれません。
もしnullでもちゃんと持ってきてほしいとおもったら@Nullableをつけましょう。

@InjectExtra("id")
@Nullable
Integer id = 0;

これで@InjectExtraはおしまいです。
ちなみにたしか変数名と@InjectExtraのvalueは同じでなければならなかったはずなのでご注意を(確証はない。でもたぶんそうだったはず)

あとの三つですがoptionalがない(デフォルト値設定がない)というのとvalueの型が少し違うという以外@InjectExtraと特に違うところはありません
(@InjectPreferenceはRoboPreferenceActivityを継承したクラス内のみ使用可能というぐらいです)

一応使用例としてテキトーに書いたソースを下に貼っつけておきます。


class RoboWay extends RoboActivity { 
    @InjectView(R.id.name) TextView name; 
    @InjectView(R.id.thumbnail) ImageView thumbnail; 
    @InjectResource(R.drawable.icon) Drawable icon; 
    @InjectResource(R.string.app_name) String myName; 
    @InjectExtra("id") Integer id; 
    @InjectExtra("from") String from;

    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        name.setText( "Hello, " + myName ); 
    } 
}

2010年12月11日土曜日

RoboGuiceとかちょっと見てみた

いや、本当にまだ見てみただけ
今のところやったこと sampleのAstroboyの全ソース読んだぐらいです。

RoboGuiceのサイト
http://code.google.com/p/roboguice/

RoboGuiceってなーにって人用にちょっとだけ解説ー

一言で言うとandroid用のDIコンテナーです。
DIってなーにっていう方はJavaフレームワーク開発入門とか読んでみましょう。
まだ触るにははやいってことです(いや、僕も今読んでる途中ですけど)

どんなことができるか。
例えばいつもはこんな感じに書くコードを


// こんな感じ
Button myButton = (Button) findViewById(R.id.my_button);
次のような感じに書けます。

@InjectResource(R.id.my_button)
Button myButton;

アノテーション書けばかってにキャストして入れてくれるよってことですな。
でもまあ、これだけじゃ別にたいしたことないじゃんってやつですが、

LocationManager mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

とかいうのも
@Inject
LocationManager mLocationManager;


とかやればかってに初期化しといてくれます。
ちょっと便利

ほかにもたとえばIntentで自分がつくったActivityが起動されたときにsetExtra()でくっついてきた値を取るときにこんなふうに書けば取っといてくれます。


@InjectExtra("nameExtra")
protected String nameExtra;
意味はこれ
nameExtra=getIntent().getStringExtra("nameExtra")

あとよくありがちな@Nullableとかもあった。

androidによくあったResourceやIntent連携で起きるデータのやり取りとかのどうしてこうなったwという仕様(キャストが必要とか)をGuiceがやさしくしてくれる感じ

追記:上でやってたことはすべてField変数にたいしてです。

とりあえず見てみただけだからこのへんにしとく
詳しくは上のページにあるsampleのところにあるAstroboyを見るといいと思うのです。
astroboyは一時間もあれば読めると思うですよ(それぐらいRoboGuice君がやさしくしてくれた)

次回のRoboGuiceに関する記事の予定
RoboGuice使ってUnitTestやってみる
(Twitterで@vvakameさんがやれとかいってたので)
もしくは普通に導入手順とか書くかも(あとあと勉強会するときにもう一度調べるのめんどくさいから)

すこしBlogを一新したのです

いや、いろいろひどいことになってたのである程度戻しました。
そろそろBlog再開しますです

2010年5月6日木曜日

現在いろいろ進行中

Blogの更新が止まっていますが、現在いろいろなプロジェクトを進行中のためです。
一番更新を遅れさせている理由は
AnscaのCoronaのバージョンが変わる度に微妙に変わる仕様に戸惑っているから

うまくクロスプラットフォームのためのソースを書きたいけど大本が微妙に変わっているという

今までのソースでも微妙に動作が変わるソースがあるのでいろいろ調べています。

もうちょっと続きはお待ちください(_ _)

2010年3月31日水曜日

Corona基礎編2 画像貼付けと簡単なtransition

前回の基礎編1のプログラムに画像の貼付けと簡単なtransitionをつけてみました。
とりあえず今回のソースです。

--
-- アプリに画像貼付け
local backImage = display.newImage("sample.png")

-- x座標とy座標の設定
local x,y = display.stageWidth/2,0
--RGBの色
local r,g,b = 255,255,255
--表示する文字列の設定
local hello = display.newText("Hello,Corona",x,y,nil,24)
--文字列の色指定
hello:setTextColor(r,g,b)

transition.to(hello,{y=display.stageHeight/2,time=1000})
--

今回新しく出てきたのは3種類ですね。
1.display.newImage(画像ファイル名)
指定された画像ファイルを読み込んでアプリに画像を貼付けます。
ちなみにもっと引数を増やして、
display.newImage(ファイルネーム[、ベースディレクトリ名][、x座標、y座標])という風にもできます。
[]でくくられている引数は無くてもデフォルト値で補われます。
ディレクトリはアプリのルートディレクトリで、
x,yはともに0で補われます。

2.display.stageWidthとdisplay.stageHeight
これは端末の横の長さ、縦の長さを取得できます。
これらを利用して機種依存を少なくすることができます。

3.transition.to(対象となるオブジェクト,{最終目標値})
transition.toはアニメーション用のメソッドです。
今回はhelloオブジェクトを対象とし、helloオブジェクトのyを画面の中央まで、
1000ミリ秒かけて動くという最終目標値を設定しています。

次回はボタンをこれにボタンを付けてみます。
それと画像ファイルでいいフリー素材が見つかったらそれを含めてzip形式でサンプルを公開します。
しばしお待ちを。

2010年3月29日月曜日

Corona基礎編1 Hello,Corona!!

というわけで、すごく簡単なHello,WorldならぬHello,Coronaプログラムを書いてみました。

以下ソースコード
--
hello = display.newText( "Hello,Corona", 10, 80, nil , 24 )
hello:setTextColor( 255,255,255 )
--
これだけでスマートフォン上にHello,Coronaと表示されます。
以下ちょっとした関数説明。
display.newText(String,x,y,font name,size)
 String:表示したい文字列
 x,y:座標
 font name:使いたいフォントの名前を文字列で
 size:文字のサイズの数値

注:fontに関しては使う機種によって用意されているfontが違います。
Coronaのサンプルコードにfont確認用のプログラムが用意されていると書いてありますが、
見つからないので、見つけたらBlogに記事として載せておこうと思います。

この行では変数helloにnewTextの戻り値、テキスト情報を格納しています。

setTextColor( r,g,b )
r:赤色の濃さ
g:緑色の濃さ
b:青色の濃さ
この関数自体には説明はいらないかと。
helloのフィールドメソッド(Luaでどういう言葉を使っているかわからないのでJava風に)であるsetTextColorを呼び出して文字の色の指定をしています。標準は0,0,0で黒色です。 
 : はJavaでいうところの . です。フィールド呼び出しの演算子ですね。

この二つを行うことによって文字が表示されます。

とりあえず初めてのCorona自体の解説でした。
次回は画像貼付けの予定です。多分今日の夜にでもささっと書いて公開します。ではでは