モバイル夜間大学に行ってきた => 米国におけるスマートフォン向けオンラインアプリ販売の最新動向

モバイル夜間大学に行ってきた。
講師はトレジャーネット株式会社代表の花房 寛氏

【要点】
iPhoneは大成功
・今後はandroidnokiaの動向次第では「第二のマッキントシュ」(= WindowsにOS戦争で負けた)になるかも
androidは互換性などの面で問題がでてくるかも
・oviもあるよ
Windows Mobileは残念だったね・・・
・ビジネス的にはしばらくはiPhoneアプリに注力した方がよい
・日本のキャリアの思いは複雑だ


次回、「2009/06/29 (月) アンドロイド新モバイル時代のサービスの作り方」に参加する予定です。
※モバイル夜間大学はほぼ毎日やってます。

androidソースコード 〜View.java

*ファイルの場所
/frameworks/base/core/java/android/view/View.java

*前文の抜粋


This class represents the basic building block for user interface components. A View
occupies a rectangular area on the screen and is responsible for drawing and
event handling. View is the base class for widgets, which are
used to create interactive UI components (buttons, text fields, etc.). The
ViewGroup subclass is the base class for layouts, which
are invisible containers that hold other Views (or other ViewGroups) and define
their layout properties.

〜拙訳
このクラスはユーザインターフェイスのための基本的なブロックである。
Viewは画面上に矩形(四角)の領域を確保し、
描画やイベントハンドリングを行う。
Viewとはwidgetsの基本クラスであり、
widgetとはインタラクティブなUI部品(ボタン、テキストフィールドetc)を形成する。
子クラスの android.view.ViewGroup は layouts の基本クラスである。
layouts とは他のViewやViewGroupを保持する見えないコンテナであり、
レイアウト上の性質を決定する。


*抜粋


"Note: The Android framework is responsible for measuring, laying out and
drawing views. You should not call methods that perform these actions on
views yourself unless you are actually implementing a
ViewGroup."

Viewの配置はAndroidフレームワークがやってくれるから、
やんなくていい。


"To implement a custom view, you will usually begin by providing overrides for
some of the standard methods that the framework calls on all views. You do
not need to override all of these methods. In fact, you can start by just
overriding onDraw(android.graphics.Canvas)."

特別なビューを実装する場合、メソッドをオーバライドする必要があるけど、
全部に対してする必要はない。
実際のところ、 onDraw(Canvas) だけオーバライドしてやってみてもよい。



"View IDs need not be unique throughout the tree, but it is good practice to
ensure that they are at least unique within the part of the tree you are
searching."

ViewのID属性はすべてを通じてユニークである必要はないけど、
探索中のツリー内では一意であるほうがよい。


次回はandroidのView(TextViewとか)をみたいと思います。

自前のチェックボックスを作る

androidでプリセットされているチェックボックスはでかすぎるし、
何よりかわいくない。

というわけで自前でチェックボックスを作ってみた。


【作り方】
(1) 画像を用意する。
⇒on/offの最低二種類。選択されてるっぽいのもあると望ましい。


(2) Viewクラスをjavaで作成する。
⇒ImageViewを親クラスとする。フラグ的な属性とかsetter/getterとか適当につけとく。

(3) レイアウト用のxmlファイルに入れて設置する。
⇒パッケージ名まで書くところ以外は普通のImageViewと同じ。

(4) 再びJavaで、Activityとかの適当な場所でsetOnClickListener / setOnTouchListenerをする。
⇒DOWNイベントで選択されてるっぽいのを埋め込み、UPできちんとしたのをセットする。
フラグにあわせてOn/Off画像を使い分ける。


完了!
とりあえず今回はandroidの☆を使ったが、埋め込む画像次第でなんでも可。(うんこさんファン必見!)


【main.xml

 



【ToggleImage.java

 
package com.example.vsample;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

public class ToggleImage extends ImageView{

public ToggleImage(Context context, AttributeSet attrs) {
super(context, attrs);
setMarked(false);
}

Boolean marked;

public Boolean getMarked() {
return marked;
}

public void setMarked(Boolean _selected) {
marked = _selected;
}
}

【VarriedSample.java

 
package com.example.vsample;

import java.io.FileNotFoundException;
import java.io.FileReader;


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.TextView;

public class VarriedSample extends Activity {
private static final String TAG = "VarriedSample";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ToggleImage image = (ToggleImage) findViewById(R.id.star);
image.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
}
});
image.setOnTouchListener(new OnTouchListener(){

@Override
public boolean onTouch(View arg0, MotionEvent event) {
ToggleImage star = (ToggleImage) arg0;

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
star.setImageResource(R.drawable.btn_star_big_on_pressed);
break;
case MotionEvent.ACTION_UP:
if(star.getMarked()){
star.setImageResource(R.drawable.btn_star_big_off_disable);
star.setMarked(false);
}else{
star.setImageResource(R.drawable.btn_star_big_on_disable);
star.setMarked(true);
}
break;
default:
break;
}
return false;
}
});
}
}


Java-ja featuring TDD

java-jaに行ってきました。

和田さん の講演で
TDD(テスト駆動開発)を学ぶというもの。

うちの会社でもテストの自動化が必要だなーっと
思っていたので、おおいに勉強になった。

すごかったのは和田さんのデモンストレーション。
ペアプログラミングでTDDをやるというもので、
メソッドの命名からリファクタリングの仕方まで大いに議論になって
盛り上がった。

eclipseすごいっすねー。