21
14

More than 3 years have passed since last update.

DroidKaigi 2020 Liteで知らなかったことメモ

Last updated at Posted at 2020-08-28

ちょっと見てみて知らなかったことをメモしておきます!Lite版でしたが楽しかったです!
まだ今日のナイトセッションと明日のコードラボがあるようなので楽しみにしています!! :eyes:

MDCの内部実装から学ぶ 表現力の高いViewの作り方 / HiroYUKI Seto

MaterialShapeDrawable

backgroundとして使うDrawable
いろんなカスタマイズができる
Shadowのカスタマイズもできるので複雑な形のShadowが表示できる。ただAndroidのShadowより少し濃いShadowになる。

MaterialShapeDrawableがMaterialShapeDrawableStateを持っていて、その中でShapeAppearanceModelが保持される。
ShapeAppearanceModelに形状や辺や角などの設定がある

Drawable

intrinsicWidth / Height
BitmapDrawableでは画像の解像度
VectorDrawableではwidthなどに設定されているもの
これを参考にViewがサイズを決める

Viewの再描画

invalidateではなく、postInvalidateを使うと別のThreadからinvalidateを呼べる。内部的にHandlerが使われるので、遅れる可能性がある。postInvalidateOnAnimationを使うと次のフレームで再描画を呼ぶことができるので、遅れる可能性が少ない。

BottomAppBarのテキストのアニメーション

TextViewではTextSizeを変化させると再レイアウトが走ってしまうため、TextScaleというTransitionを使って、ValueAnimatorでscaleX、scaleYを変化させる。
TextInputLayoutではCanvasを使ってTextの大きさを変える。(こちらは知っていた)

自動生成でさくさく実装するユニットテスト / Nozomi Takuma

https://www.youtube.com/watch?v=lj6IMuRcVHY
https://github.com/tkmnzm/test-gen を使うと
fun test(a: String, b:String) :Boolean {}みたいな関数からgenerateでParameterized testを自動的に生成してくれる!
IntelliJプラグインを作る知見などが語られています。

Night Sessionメモ:
RobolectricがJUnit5で動かないらしい。
あとRuleはextensionに移植する必要がある。
UIテストのパターンとして、Page Object Design Patternというのがあるらしい。

Androidで音声合成(TTS)をフル活用するための知識と実践事例 / maKunugi N/A [JA]

https://www.youtube.com/watch?v=yIbqlAM080s
音声合成 = 読み上げ
音声合成はWaveNetというのがブレイクスルーだった(Googleが2014年に買収)
Android 1.6から音声合成が使える
TextToSpeachのかんたんな使い方をわかりやすく説明してくれていました。
Google CloudのText to Speechを利用するとSSML、音声合成用のマークアップ言語で取得できる。

contentDescriptionにsubmit buttomみたいにすると submit button buttonみたいに言われてしまうので良くない。

KotlinのDelegated Propertiesを活用してAndroidアプリ開発をもっと便利にする / chibatching

https://www.youtube.com/watch?v=G5x1WUMj1gE
lateinitはprimitive型だと使えない。DelagetedPropertyのDelegates.notNull()であれば使えるが、これはJavaコード的にはfinalなフィールドなのでDaggerが使えないので困る。がsetterは使えるので @set:InjectであればInjectできる。

Delegates#vetoableを使うと代入を受け入れるかどうかを判定して行うことができる。
DelegatedPropertyでは重たい処理は意図せずに使ってしまうので向かない。

provideDelegate operatorでDelegatedPropertyを返すようにすることで、provideDelegateオペレーターを実装しているクラスとは別のクラスでDelegatedPropertyを実装できる。イメージ

val a by B()

class B {
  operator provideDelegate(..): DelegatedProperty {
     return C()
  }
}

class C : DelegatedProperty...
21
14
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
21
14