如题,
这里上传一段主要代码,求解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()了?!! 请高手解惑
这里上传一段主要代码,求解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()了?!! 请高手解惑
解决方案 »
- 石头剪子布游戏遇到的一个ImageButton问题
- 在android下,捕获 apk 安装的状态?
- 华为C8650如何刷机
- 问android上关于蓝牙和3G的低级问题
- android 即时通讯基于openfire创建的聊天室,不能加入聊天室
- ANDROID,,有没有Task的监听器?
- 三星S4智能皮套小视窗功能实现方法
- Android应用怎么实现免注册,直接获取手机唯一标识进行登录
- actionbar的TabListener中onTabSelected方法是如何用fragment替换activity中的view的?
- Android 6.0权限问题,申请权限成功后不回调onRequestPermissionsResult
- Android中调用urlConnectoin.getInputStream 报错java.io.EOFException
- TabHost和独立的Activity跳转问题
不知道和你的这句代码是不是有关,
可以适当调一下
把这句话去掉,或是设为VISIBLE,都一样,在第一次还是取不到值
wm.addView(mFrameLayout, params);
把这句提前调用试试 。
你可以在一初始化mFrameLayout时就addview,然后隐藏