我上课了
- public class FancyView extends View implements View.OnTouchListener {
我需要获得视图的高度/宽度.
(它可能会随着设备旋转而改变.当然,在初始化时也不知道高度/宽度.)
你可以这样做…
所以,实际上在FancyView类中只是覆盖onLayout(已更改)
- @Override
- protected void onLayout(boolean changed,int left,int top,int right,int bottom) {
- super.onLayout(changed,left,top,right,bottom);
- int hh = getHeight();
- Log.d("~","Using onLayout(changed),height is known: " +hh);
- }
或者,你可以这样做……
在FancyView类中再次使用addOnLayoutChangeListener
- private void init() {
- addOnLayoutChangeListener(new OnLayoutChangeListener() {
- @Override
- public void onLayoutChange(View v,int bottom,int oldLeft,int oldTop,int oldRight,int oldBottom) {
- Log.d("~","Using addOnLayoutChangeListener,height is known: " +hh);
- }
- });
- }
(旁白:我猜init()是最好的地方.)
两者似乎运作良好.
(A)添加一个监听器和addOnLayoutChangeListener,还是(B)覆盖onLayout(布尔值改变了?)之间是否存在任何实际差异?
使用案例:在FancyView类中,我在图像上绘制了一些东西;所以我需要知道宽度/高度要绘制的大小.
脚注.我已经注意到问题在哪里讨论“Android,获取视图的宽度/高度”,通常建议使用onWindowFocusChanged 9,因为它“更容易”).当onLayout(已更改)可用时,我真的不明白为什么你会这样做;也许我错过了什么.