0
0

More than 1 year has passed since last update.

Custom View で自身のサイズを元にサイズ変更を行う方法

Posted at

◆はじめに

Android の custom view にて、自身のサイズ変更を元に自身のサイズが変わる処理を行い、計算をすべて親クラスに丸投げするケースのメモです。

◆ダメな例その1

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    // super.onMeasure() が呼ばれてないので、サイズ計算ができておらず、目的の処理が行えない。
    doSomethingWithSizeModification()

    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}

◆ダメな例その2

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    // super.onMeasure() により、現状のサイズが計算される。
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)

    // 計算されたサイズを元に View の内部を変更するが、上記の計算と合わない内容になってしまい、表示がおかしくなってしまう。
    doSomethingWithSizeModification()
}

◆現状の解決策

なんか美しくないのですが、一度の再計算にて計算結果が安定するケースに限り、対応可能だと思われます。
※無限に連鎖するケースとかそもそも対応できるとは思えないが、、、。

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    // super.onMeasure() により、現状のサイズが計算される。
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)

    // 計算されたサイズを元に View の内部を変更する。
    doSomethingWithSizeModification()

    // super.onMeasure() により、サイズを再計算する。
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}

◆おわりに

とっても微妙な方法なので、もっといい方法があれば教えてくださいmm

0
0
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
0
0