首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2013-07-04 
求解View的getWidth()和getHeight()何时才能取到值如题,这里上传一段主要代码,求解view在什么条件下才能取

求解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,然后隐藏

热点排行