2013/03/27

Androidでスプラッシュ画面を表示する

何番煎じかわかりませんが、Androidでスプラッシュを表示する方法です。

スプラッシュを実現するにあたって、編集するファイルは

  • 一番最初に表示するActivity(MainActivity.java)
  • アクティビティのxmlファイル(activity_main.xml)

の2つです。

まずxmlファイルの方を編集していきます。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:animateLayoutChanges="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        // アクティビティに表示するコンポーネントをここに書く
        
    </LinearLayout>

    <ImageView
        android:id="@+id/splash_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@string/content_description_splash"
        android:scaleType="fitXY"
        android:src="@drawable/splash" />

</FrameLayout>

一番外側をFrameLayoutでラップして、通常の画面の上にSplash画像が重なるようにします。

android:animateLayoutChanges="true"

これは、レイアウトが変更されるときにアニメーションするかどうかを設定しています。
フェードアウトしたほうが綺麗なので、trueに設定しています。(APILevel11以上の時なので,2.xではアニメーションしません)

次に、MainActivity.javaの方を編集します。
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actiivty_main);
        
        initSplashView();
        
        SplashClearTask splashClearTask = new SplashClearTask();
        splashClearTask.execute();
    }
    
    private void initSplashView() {
        ImageView splashView = (ImageView)findViewById(R.id.splash_view);
        // スプラッシュ表示中はクリックを無視する
        splashView.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                return;
            }
        });
    }

    private void clearSplash() {
        ImageView splashView = (ImageView)findViewById(R.id.splash_view);
        splashView.setVisibility(View.GONE);
    }

    private class SplashClearTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            try {
                // 一定時間待機
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            clearSplash();
        }
    }

ポイントは、スプラッシュ表示中のクリックを無効化している部分と、SplashClearTaskの部分です。

FrameLayoutでViewを重ねるだけでは、その下にあるViewをクリックできてしまうので、スプラッシュ画像が表示されている間、その下にあるコンポーネントをクリックできないようにしています。

SplashClearTaskでは、スプラッシュを一定時間表示してからスプラッシュを消すためにdoInBackgroundでThread.sleep()を使っています。

アクティビティのレイアウトの階層が1段深くなりますが、スプラッシュ用にアクティビティを使わなくてすみます。

注意するポイントとしては、アクションバーやメニューバーは表示されてしまうので、スプラッシュの前後で表示の切替が必要です。

2013/03/12

アプリで個人として独立してやっていくためにいくら稼げばいいのか

そろそろ確定申告の締切が迫って来ました。

独立されている方や、副業でそこそこ稼いでいる方、もう確定申告は済ませました?

青色申告で65万円控除できる締切は3/15日です。

僕は今日、提出してきました。(昨年はこんなにギリギリじゃなかったのに)

いつもはこのブログでは、Androidの備忘録的なのをぽろぽろ書いているのですが、今日はちょっと違ったことを書きます。

それは、

「アプリで食べていくためにはどれくらい稼がないとダメなのか。」

です。

これを書こうと思った理由は、
  • 今までアプリの売上で2回確定申告してきて、だいたいどのくらい稼げば大丈夫なのか感じがつかめてきたから
  • 新年度を迎えるにあたり、今の会社をやめて独立しようとか思っている人の参考になればとか
そんな感じです。

まだ2年ぐらいですが、そんなに的はずれな内容にはならないと思います。

例として「都内一人暮らし」で出してみます。

まず、ひと月にかかる生活費ですが、だいたいこんな感じだと思います。

家賃:6~7万ぐらい
食費:3~4万ぐらい
水道光熱費:1万ぐらい
通信費:1万ぐらい
その他:1~2万ぐらい

で大体月に15万ぐらいかな。自炊とかもっと安いところに住んでたりすると12万ぐらいで済むかもしれません。家族を養う必要があるひとはもっとかかってきますね。とりあえず一例なので。合計は180万ぐらいです。

でアプリを開発ってことでその他必要なものを書いていきます。(1年でかかる費用)
PCとか設備費:10万ぐらい(ノートPC買ったり、PCのパーツ買ったり)
書籍費:1~5万ぐらい(ネット主体の人は安く済む)
開発者登録とか:1万
検証端末購入費とか:0~10万

大体20万ぐらいです。

その他にかかってくる費用(1年でかかる費用)
国民健康保険:前年の稼いだ額に依存するけど大体20~30万ぐらい
年金:14980円x12=18万ぐらい
奨学金返済:1~2万x12=12~24万ぐらい

社会保険料+αでだいたい60~80万ぐらいです。奨学金借りてこなかった人はその分安くなります。両親に感謝ですね。

ここまでで「一年に必要な金額」はだいたい180+20+70で270万円です。じゃあこの額を1年で稼げばいいやって思って270/12で大体月に23万ぐらい稼げばいいなって試算がでますが、そうはいきません。

そうです。「税金」です。

生活している以上、その国に税金を納めなければいけません。
で、かかってくる税金の種類は次のとおりです。

  • 所得税
  • 個人事業税(アプリ開発の場合、地方によって課税されたり非課税だったり)
  • 住民税
  • 消費税(売上が1000万以上あった場合、その2年後から課税)

所得税は「総売上-必要経費」の金額が高くなるほど、税金が高くなります。細かい計算は省いて、だいたい15%ぐらいかかってきます。

次に個人事業税が大体5%ぐらいです。知り合いの方でも課税されてたり、非課税だったりします。ただ、まだアプリで稼ぐ人が現れ始めたのがここ2~3年なので、今後アプリ開発で稼ぐ人がもっと増えると制度が変わって課税されると思います。

次に住民税ですが、均等割という全員にかかるものが3000円で、市民税が6%、県民税が4%です。なので10%ととしておきます。

次に消費税ですが、これは1期目2期目ではまず課税されません。1期目で1000万以上売り上げた場合、3期目から消費税を納めなければいけません。今は5%ですが、一年後は8%、二年後の10月からは10%です。
見なし仕入率とかあるので実際にはその半分ぐらいです。その分を所得から計算し、申告納税します。

税金は以上ですが、だいたい稼いだ金額のうち30%ぐらいは持っていかれると見ていたほうがいいです。
経費を積むと納税額を抑えられますが、アプリ開発自体はそんなに経費がかかる事業じゃないので、積むにも限界があります。

これらから、簡単ながら計算式が作れます。

「稼がなければいけない金額」-「税金(稼いだ金額の30%)」=「一年に必要な金額(270万)」

「稼がなければいけない金額」× 0.7 = 「一年に必要な金額(270万)」

「稼がなければいけない金額」 = 「一年に必要な金額(270万)」× 1.43

「稼がなければいけない金額」 = 386万

になります。これを12ヶ月で割ると大体32万円ぐらいです。

ただ、独立してやっていくと、会社員のような保証は無いので、体を壊して稼げなくなった時とかのための保険として貯蓄するようにもっと稼いでないとまずいです。
年金も、国民年金だけで、会社員のように厚生年金に入らないので、もらえる年金も少ないです。(年金システム自体が無くなるかもしれないけど)
なので余裕をもてるように一年に100万ぐらい貯蓄していくとして、だいたい月に40~50万ぐらいは稼いでおかないとやっていくのは厳しいです。

結論

アプリで食べていくためには月40~50万ぐらい稼がないと厳しい。

アプリで独立しようとか考えている人の参考になれば。

2013/03/03

ListViewのlayout_heightにwrap_contentを使ってはいけない

androidの開発でよく使うListViewのコンポーネントですが、使うときに注意する事があります。

レイアウト指定で、ListViewのlayout_heightの値にwrap_contentの値を使わないことです。

これをwrap_contentとかにしておくと、listviewにつけるadapterのgetView()メソッドが何度も呼び出されて無駄な処理が発生します。

同じListViewでlayout_heightの属性を変えた場合のLogを出してみました。

layout_height="match_parent"のとき

layout_height="wrap_content"のとき

実際にはcountが54まで繰り返し処理されていました。

原因はよくわからないですが、wrap_contentだと高さの値がコンテンツのサイズになるのでそこら辺が関係してるのかなと思います。

ちなみに,「layout_height="0dp" layout_weight="1"」でも 「layout_height="match_parent"」と同じ振る舞いで問題はありませんでした。