hanahanahunachi’s diary

Android studio でお勉強してます。

potatotips #50 (iOS/Android開発Tips共有会) に参加した.

はじめに

こんにちは,ふなちです.

potatotips.connpass.com

に参加して来ました.

先月から続いて2回目のAndroidブログ枠での参加でした!

なんで九州の高専生が木曜の夜に東京にいるんだとかそう言うことは気にしないでください!実は久留米で午前中の1,2限の授業を授けてから来たんです..!

 

今回は記念すべき第50回目のpotatotipsだったのにも関わらず参加することが出来,嬉しく思います(((o(*゚▽゚*)o)))

第一回は 2013年なんですね!長い歴史だ...!

発表者の方には,今までの発表の振りえりもしている方が多く見られました.

 

※今回もただの個人の感想になってしまっているところや,スライドに書いてあるだろうことをつらつらと書いたもの多いですが,ご了承ください.

また,間違い等の発見した場合はTwitterなどで知らせてもらえると嬉しいです🙇‍♀️

 

発表

"Hello Flutter"の次におさえたいFlutterのポイントその3 by かんばらけんいち

www.slideshare.net

AppBuilder v.a 20170605-09:10

ちなみにその1とその2はこちら

Hello Flutterの次におさえたいFlutterのポイント

Hello Flutterの次におさえたいFlutterのポイントその2

Flutterのお話でした.

potatotipsでの発表は7回目!凄い!

初参加の第二回potatotipsの発表でも,クラスプラットフォームに関する発表をしていたそうです.

Androi,iOS,FirefoxOS,Tizen で動くアプリを一気に作れちゃうPhoneGap(Cordova)を使っていたそうです.

私は,後ろの2つのOSをよく知らなくて興味深かい!

FirefoxOSは2016/5に開発終了してるんですね. Tizanは実際に見たことないです.

(競技以外のプログラミング始めたのが2年弱前くらいなので許してほしい)

また,4つのOSでコードの共通化ってどれくらい出来てるんだろう?気になりました.

 

flutterで翻訳アプリを作っていて,近日公開予定らしいです.

私,英語が苦手なのでお世話になるかもしれません...!

 

今回は,UIについてのお話だそうです.

https 通信とかデータの永続化についてのお話しもいつかお聞きしたい!)

Widged Treeの構造は綺麗で分かりやすくて好きです.

Columnの中にどんどんViewの子を追加していけばいいんですね!

Conclution(Flutter向けのGUI Builder)のGoogle I/O 2018でのリリースしてくれたら嬉しいです!

www.ntt-tx.co.jp

recyclerview-selection by くぎみや

 

speakerdeck.com

 recyclerview-selectionに関するお話でした.

何週間か前に,くぎみやさんの記事を読んだ記憶が...!

recyclerview-selectionは,最近お世話になる機会が多くなってきた,android-ktxと同じ'androidx.'パッケージに含まれているそうです.

SelectionTracerを使うんですね(。 ・ω・))フムフム

いつも通りに,Listを作って,それに

  • stableId を使うように設定する.(ViewAdapterにsetHasStableId(true)と書く)
  •  SelectionTrackerのインスタンスを作る.(引数の詳しい説明はスライドとブログに書いてあるので割愛します.)
  • ( SelectionTrackerのインスタンス)で必要なItemDetailLookupを作る.

だけだそうです!

あとは,洗濯部分に色をつけたりなどしたい場合は,selectionTracerのインスタンスをAdapterで受け取り,よしなに実装すればいいようです.

この時,selectionTracerのインスタンスは,Adapterを生成後に設定してあげる必要があるので注意だそうです(※詳しくはブログを読むと良さそうです.)

 

いつも,くぎみやさんのブログにはお世話になっているので生でくぎみやさんの発表を聞けて嬉しかったです!

また,この発表の内容のブログ

inside.dmm.com

もとてもわかりやすく書いてあったので読むべきだと思います!

あと技術書典4にて釘宮さんの本買わせて頂きました!読むの楽しみです.

Glide 4 with Kotlin by Hiroyuki Kusu

speakerdeck.com

Glide4についてのお話でした.

私も(は)Glideにはいつもお世話になってます(感謝)

Glide4は,デフォルトでは"フェードなし"なのですね!

Glideは拡張できて,その関数を書く際には第一引数にRequestOptionを入れる事とNonNull & static であるということは守らないとダメだそうです(。 ・ω・))フムフム

そしてそれは拡張関数として書いたらいい感じになる!

DataBindingのListnerを拡張関数で書くのと同じノリなのでサクサクかけそうで良さげです!(こういう拡張関数の使い方超好きなので&折角教えて頂けたので,Glideへの拡張もやっていきたい(((o(*゚▽゚*)o))))

丸くくり抜くのcircleCrapとか,transrationは,すごく便利!

今まで私,

RequestOptions.circleCropTransform() 

って書いちゃってたんですが,4からはcircleCrap()があったんですね汗...お勉強になりました(> <。).

他に,プレースホルダーとフェードを同時に適用するとプレースホルダーが消えない問題の解決方法,助かります🙏

コードが冗長になってしまうのはしょうがないんですね.(悲しい)

DiffUtil and ListAdapter by くぼで

speakerdeck.com

DiffUtilとListAdpterを使おう!というお話でした.

DiffUtilはO(n)で差分を取ってくれて更新してくれるので最強!

ListAdpterは,RecyclerView.AdapterのDiffUtilを使ったものだそうです.

差分はbackground thread,結果の通知はmain threadで行ってくれるの強いです.

ListAdapterを使うとsubmitListするだけでいい&その時使うListはMutableListじゃないほうがいいってとこが腑に落ちてなかったんですが,Listのインスタンスが同じだったら何もしないって処理をしてたからなんですね,

スッキリしました(((o(*゚▽゚*)o)))

私自身,DiffUtil,listAdapterもだったけ...🤔インターンに行った際に社員さんから教えて頂いて使ったの思い出した&ちゃんと理解し直す良い機会になりました🙏

github.com

(用途は思いつかないが)Viewのキャプチャを撮ってみる by どくぴー

www.slideshare.net

Viewのキャプチャを撮ってみよう!というお話でした.

画面のキャプチャをとる方法には,

電源ボタン+ボリュームダウンボタンを押す,adbを叩く,AndroidStudioのLogcatを使うなどがあるそうです.

私は,最近は基本Logcatのボタンを使っています!便利!

では,画面の必要な部分だけ撮りたい,とかStatus barを除いた画面キャプチャが取りたい!などなど,Viewのキャプチャを撮りたい場合ってありますよね?と..

確かにです.私はViewのキャプチャを撮ることが出来るとは知らずに今までいちいち画像編集してました(> <。).

Viewだけのキャプチャを撮るには,View#setDrawingCacheEnavleをtrueにしてView#getDrawingCache()でViewのCashを作成(取得)し,それをBitmapに変換,(android-ktxを使っているんであれば,View#toBitmapだけで良いらしい)View#setDrawingCacheEnavleをfalseに戻すだけで良いんですね.

めっちゃ簡単だヾ(。>д<)シ 

その後,PDFとして利用したい場合は,PdfDocumentを使ってゴリゴリ実装すれば良いようです.

Canvas芸をする必要があるそう&重い(当たり前だけど非同期処理必須.)

ページを作る際には,PageInfo.Builder(ページの幅,ページの高さ,ページ番号).create()を実行する必要があるそうです.(PageInfoってのはページ情報を管理するクラス)

ちなみにページのサイズ指定時の単位はpoints(72points = 1 inch)で,ページの大きさを指定する際にはちょっと気合が必要そうです.(画面のサイズを測ったり等々)

画面の全体のキャプチャが欲しい際には,MediaProjection API(API21~)を使うといいそうです.

便利そうだしやってみたいと思ったのですが,アプリ側からViewのキャプチャを撮るというのは,どういう時に使うのでしょうか..?(パッと調べた感じだとメールに添付するとかがありましたが,もっと他の用途をしりたいです!)

Preference as a Service by izumin5210

speakerdeck.com

Preference..というお話でした.

potatotipsでの登壇は今回で8回目なんですね!凄いですオオォォォ(゚ロ゚*)

Preferenceの実装には色々な方法, SharedPreferenceや,Realm,FireBase Remote Config等を使う方法があるそうです.

私は,SharedPreferenceしか使ったことない...ヾ(。>д<)シ 

Preferenceは,サーバー側の挙動に影響しやすいものが多いので,ローカルだけで保存するというような方法を取ることは出来ない.

そこで,自前でサーバーを実装していた そうです!

でも,毎回自前でサーバーを書くのは辛く,

また他のアプリとの共有したい部分など出来た時にも困ったそうです.

そこで,Preference as a Server を作ったそうです.

やはり自前な理由は,マイクロサービスであり,内部の別のサービスからも参照したかった,データを外に出さずにすむ,設定値も簡単に追加変更ができ,自分たちが使いやすいカテゴライズ機能を付けれる.といった理由からだそうです.

他にはデバックする際にも有効活用できるらしく,素晴らしいと思いました!

今度,もし高専プログラミングコンテストの本戦出場が出来た暁にはこの方法を,試してみたいと思います!

技術力的にできるか不安ですが(> <。)

 消費型課金を導入する by もりぞー

Play Billing Library を使うと良いぞ!っていうお話でした.

課金が完了するまでの流れは,

  1. クライアント側からGoogleに課金したいよっていうのを伝える.
  2. その後,Googleからレシートを受け取る.
  3. サーバーにレシートの検証をしてもらう.ここでユーザーやアイテムの情報を送る.
  4. サーバーからGoogleに検証してもらう.
  5. その後クライアントはレシートの検証結果をもらう.
  6. 消費リクエストをクライアントからGoogleに送る.

という感じらしいです.(申し訳ないことに,うる覚えの状態で書いたので間違えてたら本当にすいません.)

色々引っかかりポイントがあるので気をつける.べきとの事でした.

課金システムのフローを丁寧に説明してくださってわかりやすかったです.

キーボードの切り替えをいい感じにしたい by わくわく

speakerdeck.com

キーボードの切替を良い感じにしたいというお話でした.

ただ単に,キーボード出ないものが表示されているかを判定してそれを表示させたり,非表示にさせたりするだけのコードだと,

バコン!ガコン!みたいになる.

これを解決する為に,Messengerを参考にしてみたそうです.

View構造のdumpをとりつつ,壊す勢いで調べたそうです!

経験不足の私は,今まで開発者モードのLayoutの境界を表示させたり等しかしたことなかったので,今度から他のアプリの良いところを盗みたいときはdumpも使っていきたいです.

結果,特別なCustom Viewなどは使っていない&裏にViewがあるようだったそうです.

そこで,キーボードを隠す際に高さが変わらないようにすれば良いのでは?という結論に至ったそうです.

そこで,ソフトウェアキーボードを隠す際にはソフトウェアキーボードの設定をWindowsManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE(キーボードと他のLayoutが被らないようにする)にし,逆に出す際には ,WindowsManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING(キーボードが出てきた際に高さを調節しないようにする)を設定すればいいそうです(。 ・ω・))フムフム

こうすることで,あのチカチカ,バコン,ガコンとしていたキーボードがチカチカ,バコン,ガコンとならずに隠れたり出てきたりするようになるんですね!

 

経験が浅いのもありキーボード周りを触ったことがなかったので,とてもお勉強になりました.

この発表を聞いた後からキーボードのチカチカが凄くきになるようになりました .

懇談会の時も凄く楽しそうに喋っていらっしゃったのが印象的でした.

adjustnothing

github.com

 

 ディープリンクを実装した by たかしぃ

speakerdeck.com

デープリンクに関するお話でした.

デープリンクを実装した流れは,

  1. 起動画面は透明のActivityにして
  2. その?Activity(schemeが追加されたもの)でURL schemeのデータを受け取る
  3. その後,データのQueryに応じて,どのActivityを表示させるかや,Activityをstuckに積むかなどの条件分岐をする.

という感じなのだそうです.

OAuth認証と同じ手順で行けば良さそうなので,デープリンクの実装はしたことがないのですがスッと理解できました.

また,Activityをstuckに積む操作をする場合の手順は,

ActivityLifecycleCallbackインターフェースを実装したクラスを作成し,他のActivityからの通知を受け取るようにして,onActivityCreatedやonDestoryを通った時点で他のActivity側から通知を送ると,現在起動しているActivity をstuckに良い感じにaddすることができる.

他に,ホーム画面をstuckに積んでから該当画面を開きたい場合はTaskStackBuilderを使えば良いようです.(※TskStuckBuilderを使う前のActivityは消去されるので注意が必要)

最後にdroid girlsの宣伝🎀

私も,参加しました!お勉強になりましたし,気軽にお話することができて楽しかったです! 

また先日,droid girlsのslackに参加させていたのですが,そこで飛び交っている様々な質問にあんざいさんや,強い人たちが丁寧に答えて下さったりしているなど,素晴らしい環境で驚きました.

最後に

 全体の感想なのですが,今回も初めて知ることなどが多くあり勉強になりました.

 

軽食もとても美味しかったです🍔🍟!(ポテトチップスが美味しそうに飾られていたのにも関わらず写真撮り忘れてしまってました.すいません(> <。))

f:id:hanahanahunachi:20180424000946j:plain

また,Wantedlyの社員さんともお話させていただいたのですが,フレンドリーで技術力も高い人が多く,凄く楽しそうでとても良い会社なんだなぁってことが伝わってきました.

 

今回の東京旅行?は,DroidGirls目的であり,せっかくなので以前楽しくお勉強させて頂いたpotatotipsにも参加しよう!という軽い気持ちで参加したのですが,実際に終わってみるととても充実したイベントとなり本当にきて良かったなぁと思えました.

 

長い長いブログですいません,お読みになって下さった方ありがとうございました!

時間があれば,DroidGirls参加記も書きたいと思います.