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

lunar1983 2012-04-24 05:35:28
如题,
这里上传一段主要代码,求解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()了?!!

请高手解惑
...全文
481 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
无谓生活 2013-04-26
  • 打赏
  • 举报
回复
4楼厉害~~~
lunar1983 2012-04-25
  • 打赏
  • 举报
回复
3楼,4楼正解,谢谢!
danielinbiti 2012-04-24
  • 打赏
  • 举报
回复
第一次addview还没有布局,只有当前函数执行完才会进行回调布局。
你可以在一初始化mFrameLayout时就addview,然后隐藏
wyf35429827 2012-04-24
  • 打赏
  • 举报
回复
因为第一次 mFrameLayout 还没有加载
wm.addView(mFrameLayout, params);
把这句提前调用试试 。
lunar1983 2012-04-24
  • 打赏
  • 举报
回复
mFrameLayout.setVisibility(INVISIBLE);
把这句话去掉,或是设为VISIBLE,都一样,在第一次还是取不到值
  • 打赏
  • 举报
回复
mFrameLayout.setVisibility(INVISIBLE);
不知道和你的这句代码是不是有关,
可以适当调一下

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧