1. 程式人生 > >Android 關於環信聊天 視訊介面小視窗問題

Android 關於環信聊天 視訊介面小視窗問題

最近有公司有一個需求 需要將環信的視訊聊天視窗縮小 類似微信那樣,可以放大,並且縮小後可以看到文字聊天的視窗。看了環信的程式碼 發現文字聊天和視訊聊天是兩個獨立的activity,於是想到activity如何能懸浮並且 在他下面的activity能獲得焦點,試了幾次發現不能實現。後來有想到一種辦法 ,這種辦法比較笨拙,但是真的實現了,我將視訊聊天的邏輯和圖文的邏輯寫到了一個activity裡面,視訊聊天的介面採用懸浮視窗,當在聊天介面的時候需要啟動視訊介面 便將視訊的view 新增到windowmanager中,實現懸浮 並且可以改變大小,在小視窗的模式下 還可以傳送圖文訊息。

網盤地址:http://pan.baidu.com/s/1jIcBNfg,希望可以幫到有同樣需求的人。大笑

大笑

主要程式碼片段:

/**************************** 視訊懸浮窗********************************/
WindowManager mWindowManager;
WindowManager.LayoutParams wmParams;
public void showFloatWindow() {
    wmParams = new WindowManager.LayoutParams();
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; wmParams.format = PixelFormat.RGBA_8888; wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; wmParams.gravity = Gravity.LEFT | Gravity.TOP; wmParams.x = 0; wmParams.y = 0; wmParams.width = ScreenUtil.getScreenWidth(ChatActivity.this
); wmParams.height = ScreenUtil.getScreenHeight(ChatActivity.this) - ScreenUtil.getNavigationBottomHeight(ChatActivity.this); viewRootView.setParams(wmParams); viewRootView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(isChangefreeState){ changeFloatSize(); isChangefreeState = false; } } }); mWindowManager.addView(viewRootView, wmParams); isAddWindowManager = true; } public void changeFloatSize() { if (!isChangefreeState) { wmParams.x = ScreenUtil.getScreenWidth(ChatActivity.this); wmParams.y = 0; wmParams.width = ScreenUtil.getScreenWidth(ChatActivity.this) / 3; wmParams.height = ScreenUtil.getScreenHeight(ChatActivity.this) / 3; mWindowManager.updateViewLayout(viewRootView, wmParams); callStateTextView.setVisibility(View.INVISIBLE); chronometer.setVisibility(View.INVISIBLE); nickTextView.setVisibility(View.INVISIBLE); switchCameraBtn.setVisibility(View.INVISIBLE); voiceContronlLayout.setVisibility(View.INVISIBLE); hangupBtn.setVisibility(View.INVISIBLE); changeBtn.setVisibility(View.INVISIBLE); } else { wmParams.x = 0; wmParams.y = 0; wmParams.width = ScreenUtil.getScreenWidth(ChatActivity.this); wmParams.height = ScreenUtil.getScreenHeight(ChatActivity.this) - ScreenUtil.getNavigationBottomHeight(ChatActivity.this); mWindowManager.updateViewLayout(viewRootView, wmParams); callStateTextView.setVisibility(View.VISIBLE); chronometer.setVisibility(View.VISIBLE); nickTextView.setVisibility(View.VISIBLE); switchCameraBtn.setVisibility(View.VISIBLE); voiceContronlLayout.setVisibility(View.VISIBLE); hangupBtn.setVisibility(View.VISIBLE); changeBtn.setVisibility(View.VISIBLE); } } public void removeFloatWindow() { if (viewRootView != null && isAddWindowManager) { mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); mWindowManager.removeView(viewRootView); isAddWindowManager = false; } }