9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初めて Android アプリを作るまで1ヶ月だらだらとやったこと

Posted at

#はじめに

これは私が Android をつくるために行ったことを書き記した日記みたいなものです。
これから Android アプリを作りたい方は参考というか励みにしてもらいたい。

私の説明

  • とある Web 会社に勤務
  • 個人的な役職はフロントエンドでアプリ制作経験なし
  • 社内に iPhone の人はいるが、Android の人はいない
  • 案件もない。けどこれから来れば嬉しい。是非弊社(個人的に僕でもいいですよ。)に案件を。
  • Java は真面目にしたことない

私のいる会社は主に web ですが、アプリの引き合いはそこそこくる。
その内に iPhone ができる人はいるんだが、Android がいない。
会社にフロント系の人は少なからずいるし、このままだと新米の私のポジションは不利になるままだ。。。
ならばここでアプリでもつくったったるわーということで活動開始したわけです。

制作物

しかし、都合良く案件があるわけでもない。
そこで以前制作した (記事もあるよ) Awwward まとめくんのアプリを作ろうではないか。

ちなみに出来上がったものは

ここにあるので参考までに。

Awwward まとめくん

の際に制作した Awwwards の感想を Tumblr でまとめるサイトである。

またも Tumblr 様の力を借りて 0円 で記事配信アプリをつくってしまおうというわけです。

制作スケジュール

表題にあるように1ヶ月かかった。業務の傍ら、土日などを使ってだらだら制作した結果時間がかかった。しっかりとりくめば1週間で終わる内容だろう。ださいことこの上ない。

本を買う

とにもかくにも、アンドロイドの本を買った。
別会社の尊敬する先輩に勧められた本で。これさえあれば大体おkとのこと。

ちなみにこの本である。
Androidプログラミングレシピ増補改訂版 アーキテクチャ/UI/ネットワーク編

よっしゃこれさえあれば上手く行く!!

そんな上手くいきませんでした。

嘘だった。確かにこの本にはいいことが書いてあるが

  • Android Studio どうすんだ
  • まずなんのファイル弄ればいいんだ
  • レイアウトとかどうすればいいんだ

等、まぁそうだ。といった感じで心が折れた。これで 1 週間が死んだ

その分サイトの構造を妄想した1週間だった

本のおかげで単語の知識はついて
何を具体的に覚えればいいか悟り始める

  • アクティビティの構成要素を記述するのと、基本的なプロパティを知ること
  • リスト形式のレイアウトの出し方
  • web 通信の仕方、画像の読み込み
  • アニメーションさせる

等である。幾つかの解決は本に載っていたが、イマイチ根本が分かっていないのでピンとこなかった。

神サイト ドットインストール

こうなったらドットインストールするしかない。初歩を理解するにはこれがよいと判断

ステマじゃないけど、Android アプリをつくろうみたいなレッスンがちょうど開始していた。有料だが、その価値はあったと思う。

API のバージョンもほぼ同じだし、現環境を理解するのは最適だった。
普段は流し見程度で終わるドットインストールを深夜アニメをみるかのように何回も聞きコードを写経した。

そうしたら、次のことが理解できた。

  • アクティビティの構成要素
  • レイアウトの組み方
  • リストの出し方とか
  • なんとなーくの Java の書き方

よっしゃこれがあれば、後は少し応用すればいけるやん!!

そんな上手くいきませんでした。

確かにリストもだせようになったし、リスト用のレイアウトも組めた。

しかし アニメーション系の処理 でつまづいた。

個人的なコンセプトとして、リストをタップするとビョイーンと開いてそのまま詳細ページになるというオシャンティーな構造にしたかった。

そのビョイーンをアニメーションさせたかったのだが、本にあるアニメーションの参考コードも動かない。なぜだ!

  • height とかある程度の値は特別に処理を記述する必要がある
  • アニメーションのアップデートがその際フレーム毎に呼ばれるので interpolatedTime の値(0-1) の値から height の値を計算してあげる必要がある

opacity とか rotate とかはある程度用意された関数に値をわたせば処理してくれたが、 height は 0 から 1 の状態へ飛んでしまったので注意が必要でした。

そうこうしてる内に1週間がたった。

そろそろソースコードがごちゃついてきた

問題自体はかなりの解決があったが、Tumblr の API を非同期にとって来た際の コールバックの処理とかの管理が大変になってきた。

ここからは、何かのパターンに乗っ取らないと首を絞めると察知。先輩に助言を請う。

そうして導入したのが、MVPパターンである

MVP

  • Model
  • View
  • Presenter

の頭をとって MVP と呼びます。Presenter の部分が Controller になってると、有名な MVC パターンですね。

MVCMVC の亜種らしく。それほど大きくないプロジェクトだと MVPで十分らしい。

まぁ詳しい説明は長いので割愛するのですが、とても良く出来ています。

特にサンプルを読むのが一番良い。
https://github.com/antoniolg/androidmvp

これを読むといかに Interface の実装が大事かが理解できます。
個人的には、よく Javascript の設計で Emitter(Manager) を介してイベントを管理することが少なくないと思いますが、それに近しい感覚を覚えました。なので個人的には導入しやすかったです。

そうして1週間がたった。

残すはイベントの処理

大体の構築は終わり、残す大きな課題は スクロールさせない処理 の実装でした。

先に話した通り、このアプリは リストViewと詳細View の状態を両立させるのが目的で、詳細View の時はリストのスクロールを止めたいわけです。

意外と理解しにくいイベント管理

とりあえず、ここを読んで理解したつもりになりました。

でここで勘違いしたのが、

  • リストのスクロールイベントをtrueで返せば動かないだろう
  • requestDisallowInterceptTouchEvent の仕様

まず リストのスクロールイベントを true 返しても、子にスクロールイベントがある場合には微妙に動きます。なんか正解に近い様な気がして永遠ここら辺を彷徨いました。

そして requestDisallowInterceptTouchEvent の仕様です。
私は、親が onInterceptTouchEvent() でイベントを明示的に止めている際の救済措置かと思っていました(まだ合っていると思っている)。。
実際のところは、子が親に対して "俺のイベントの邪魔をするなよ" という命令が出せる模様。
あと重要なのが、タッチイベントの際には毎回これを読んであげなくてはならない点も重要ですね。
イマイチ理解できていないので説明得意な方は私と会いましょう。

リストの子要素に ScrollViewFrameLayout とかスクロール系の処理が入っていると処理が面倒になるのでご注意を。。。

出来た!!

色々ありましたが、できました!まだまだ課題はありますが、とにかく作るのが大事ですね!

とりとめのない記事になりましたが、読んでくださった方の参考になれば幸いです。

フロントエンドがいきなりアプリ開発とか正直キツいですがなんとかなるもんです。一緒に頑張りましょう。

Android の仕事ほちい

ほちい。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?