当前位置: 代码迷 >> Android >> 求解View的getWidth()和getHeight()何时才能取到值解决办法
  详细解决方案

求解View的getWidth()和getHeight()何时才能取到值解决办法

热度:38   发布时间:2016-05-01 21:19:40.0
求解View的getWidth()和getHeight()何时才能取到值
如题,
这里上传一段主要代码,求解view在什么条件下才能取到宽度和高度,要getWidth()和getHeight()
  private WindowManager wm = null;
  private WindowManager.LayoutParams params = new WindowManager.LayoutParams();
  private FrameLayout mFrameLayout;

  public void initView() {
  mFrameLayout = new FrameLayout(getContext());
   
  wm = (WindowManager) getContext().getSystemService(Activity.WINDOW_SERVICE);
  params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
  | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
  params.width = WindowManager.LayoutParams.FILL_PARENT;
  params.height = WindowManager.LayoutParams.FILL_PARENT;
  params.alpha = 80;
  params.gravity = Gravity.LEFT | Gravity.TOP;
  params.format = PixelFormat.TRANSLUCENT;  
  }


  class MyViewTouchListener implements View.OnTouchListener {
  //在进入touch事件前,已经调用过initView()函数了
  int eventaction = event.getAction();
  public boolean onTouch(View v, MotionEvent event) {

  switch (eventaction) {
  case MotionEvent.ACTION_DOWN: 
  wm.addView(mFrameLayout, params);
  mFrameLayout.removeAllViews();
  mFrameLayout.setVisibility(INVISIBLE);
  //从log里可以看出在第一次touch down的时候,取到的大小总是0, 以后的touch down事件就能取到正常值
  Log.i(TAG,"...mFrameLayout width........"+mFrameLayout.getWidth()+"....mFrameLayout height..."+mFrameLayout.getHeight());
  break;
  case MotionEvent.ACTION_MOVE:
  。。。。
  case MotionEvent.ACTION_UP:
  。。。。
  case MotionEvent.ACTION_CANCEL:
  。。。。  
  }
  return false;
  }
  }

  从log里可以看出在第一次touch down的时候,取到的大小总是0, 以后的touch down事件就能取到正常值了
  这到底是为什么,难道第一次没有onDrow(), 第二次就onDrow()了?!!

  请高手解惑

------解决方案--------------------
mFrameLayout.setVisibility(INVISIBLE);
不知道和你的这句代码是不是有关,
可以适当调一下
------解决方案--------------------
因为第一次 mFrameLayout 还没有加载 
wm.addView(mFrameLayout, params);
把这句提前调用试试 。
------解决方案--------------------
第一次addview还没有布局,只有当前函数执行完才会进行回调布局。
你可以在一初始化mFrameLayout时就addview,然后隐藏
  相关解决方案