早起きしすぎた

Standard
早起きしすぎた

ちょっと昼寝のつもりが12時間ぐらい爆睡してしまったので、今日は4時すぎから起きとります。
 
せっかく早起きしたので、こないだ寝る寸前に思いついたAndroidアプリを作ってみました。Androidケータイ持ってないので実機でテストできません。ヒマな人、貸してください。あとデザイン変えたいのでムフフな絵を描いてくれる人いませんか?Android Marketで公開できたあかつきには、売上の半分を渡します。ちなみにアプリは50円にする予定です。開発中のベータ版アプリはこれです。XperiaとかDesireとか持ってる人はインストールしてみてください。そしてキャプチャを送ってください。背景が伸びまくってる予感しかしません。 → あぽり
以下がいよー
 
 
アプリ名:考え中
アプリ説明:カラダを触るといろんな声を出すよ。触る場所と触り方で声の種類も変わるよ。
カテゴリ:foolish
アプリキャプチャ:
screenshot

CAP 001

screenshot

CAP 002

備考:
   Picture from テケ
   Sounds from あみたろ
 
 
 
「こする」の検知がよくわからん
 
「カラダが触られた」っていうのは、透明のボタンを配置しておいて、そのボタンにリスナーを設定してます。「タッチされた」っていうのはOnClickListenerで

((Button)findViewById(R.id.btn)).setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        show("どんたっちみー");
    }
});

みたいなことをやればいいと思うんだけど、「こすられた」っていうのはどう判断すればいいのかよくわからんです。いまはOnTouchListenerを設定しといて、android.view.MotionEvent.getAction() で「タッチされた部分が動かされたら」みたいなことをやってます。ただこれをエミュレータ上で試すと何回もイベントが発生してるような。。実機でやってみたら違ったりする系のノリですか?

((Button)findViewById(R.id.btn)).setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                show("こすってんじゃないわよ");
                break;
            case MotionEvent.ACTION_CANCEL:
                break;
        }
    return false;
    }
});

 
 
 
先週から仕事でも軽いAndroidアプリを作ってるんですが、学んだ教訓がひとつ。
安易な気持ちでTableLayoutを使わない
です。
htmlと同じ勢いでテーブル使ってるとレイアウトの調整に苦しむ気がしました。LinearLayout使って、横に並べたいときはandroid:orientation=”horizontal”、縦はandroid:orientation=”vertical”を組み合わせてったほうが楽に調整できる気がします。あと、android:layout_widthとandroid:layout_heightにはwrap_contentとかfill_parentじゃなくて”?px”とか”?sp”が使えることに気づくとグッと調整が早くなりました。
上の開発中アプリで使ってるレイアウトのxmlは↓な感じです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#fefefe"
    android:scrollbars="vertical"
    android:scrollbarSize="18px"
    android:scrollbarStyle="outsideInset">
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/back001">
    <Button android:text=""
            android:id="@+id/head_move"
            android:layout_height="26px"
            android:layout_width="wrap_content"
            android:layout_marginTop="60sp"
            android:layout_gravity="center"
            android:gravity="center"
            android:minWidth="200sp"
            android:background="@drawable/alpha"/>
    <Button android:text=""
            android:id="@+id/head"
            android:layout_height="50sp"
            android:layout_width="50sp"
            android:layout_marginTop="0sp"
            android:layout_gravity="center"
            android:gravity="center"
            android:background="@drawable/alpha"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginTop="140sp"
    android:gravity="center">
    <Button android:text=""
            android:id="@+id/beachLeft"
            android:layout_height="50px"
            android:layout_width="50px"
            android:layout_gravity="left"
            android:layout_marginRight="25sp"
            android:gravity="center"
            android:background="@drawable/alpha"/>
    <Button android:text=""
            android:id="@+id/beachRight"
            android:layout_height="50px"
            android:layout_width="50px"
            android:layout_gravity="left"
            android:gravity="center"
            android:background="@drawable/alpha"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginTop="50sp"
    android:gravity="center">
    <Button android:text=""
            android:id="@+id/heso"
            android:layout_height="50px"
            android:layout_width="30px"
            android:layout_gravity="center"
            android:gravity="center"
            android:background="@drawable/alpha"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginTop="10sp"
    android:gravity="center">
    <Button android:text=""
            android:id="@+id/xxx"
            android:layout_height="50px"
            android:layout_width="30px"
            android:layout_gravity="center"
            android:gravity="center"
            android:background="@drawable/alpha"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>

 
 
 
もう少しタッチできる部分を増やしたらいったん公開して、Version2.0とかで音を設定できるようにすればいいかなーと思ってます。
 
追記
会社の人に教えてもらったけど、MotionEvent.ACTION_MOVEのところは、OnTouchListenerが動くたびに反応してるので上だと反応しまくってると。なので、別に「こする」検知用のクラスを用意して、eventを渡すメソッド作ればよいみたいです。受けとった側でしきい値を超えたら、「こすられた」って判断してやればいいと。数学とかもうすっかり忘れたけど、ピタゴラスの定理とか使えばいんじゃね?
 
 

Cover image is not found
amazon.co.jpで詳細情報を見る


Facebook comments:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>