您的位置:首页 > 运维架构

popupwindow 弹出框 使用详情

2014-11-14 10:41 399 查看
        wmParams = new WindowManager.LayoutParams();  

        //获取的是WindowManagerImpl.CompatModeWrapper  

        mWindowManager = (WindowManager)getApplication().getSystemService(getApplication().WINDOW_SERVICE);  

        Log.i(TAG, "mWindowManager--->" + mWindowManager);  

        //设置window type  

        wmParams.type = LayoutParams.TYPE_PHONE;   

        //设置图片格式,效果为背景透明  

        wmParams.format = PixelFormat.RGBA_8888;   

        //设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作)  

        wmParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE;        

        //调整悬浮窗显示的停靠位置为左侧置顶  

        wmParams.gravity = Gravity.LEFT | Gravity.TOP;         

        // 以屏幕左上角为原点,设置x、y初始值,相对于gravity  

        wmParams.x = 50;  

        wmParams.y = 20;  

  

        //设置悬浮窗口长宽数据    

        wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;  

        wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;  

  

         /*// 设置悬浮窗口长宽数据 

        wmParams.width = 200; 

        wmParams.height = 80;*/  

     

        LayoutInflater inflater = LayoutInflater.from(getApplication());  

        //获取浮动窗口视图所在布局  

        mFloatLayout = (LinearLayout) inflater.inflate(R.layout.float_layout, null);  

        //添加mFloatLayout  

        mWindowManager.addView(mFloatLayout, wmParams);  

        

        

        

        //浮动窗口按钮  

        mFloatView = (Button)mFloatLayout.findViewById(R.id.tv);  

       mbt = (Button) mFloatLayout.findViewById(R.id.tv2);

          

        mFloatLayout.measure(View.MeasureSpec.makeMeasureSpec(0,  

                View.MeasureSpec.UNSPECIFIED), View.MeasureSpec  

                .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));  

        Log.i(TAG, "Width/2--->" + mFloatView.getMeasuredWidth()/2);  

        Log.i(TAG, "Height/2--->" + mFloatView.getMeasuredHeight()/2);  

        //设置监听浮动窗口的触摸移动  

        mFloatView.setOnTouchListener(new OnTouchListener()   

        {  

              

            @Override  

            public boolean onTouch(View v, MotionEvent event)   

            {  

                // TODO Auto-generated method stub  

                //getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标  

                wmParams.x = (int) event.getRawX() - mFloatView.getMeasuredWidth()/2;  

                Log.i(TAG, "RawX" + event.getRawX());  

                Log.i(TAG, "X" + event.getX());  

                //减25为状态栏的高度  

                wmParams.y = (int) event.getRawY() - mFloatView.getMeasuredHeight()/2 -25;  

                Log.i(TAG, "RawY" + event.getRawY());  

                Log.i(TAG, "Y" + event.getY());  

                 //刷新  

                mWindowManager.updateViewLayout(mFloatLayout, wmParams);  

                return false;  //此处必须返回false,否则OnClickListener获取不到监听  

            }

        });   

          

        mFloatView.setOnClickListener(new OnClickListener()   

        {  

              

            @Override  

            public void onClick(View v)   

            {  

                // TODO Auto-generated method stub  

                Toast.makeText(FxService.this, "onClick", Toast.LENGTH_SHORT).show();  

            }  

        });  

        mbt.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
    //getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标  

                //减25为状态栏的高度  
wmParams.x = (int) event.getRawX() - mbt.getMeasuredWidth()/2; 
wmParams.y = (int) event.getRawY() - mbt.getMeasuredHeight()/2 -mFloatView.getMeasuredHeight()-25;  

//                wmParams.y = (int) event.getRawY() ;

//    wmParams.x = (int) event.getRawX();
 //刷新  

                mWindowManager.updateViewLayout(mFloatLayout, wmParams);  
return false;
}
});

    } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息