android 多屏異屏顯
- android 多屏異屏顯
- 視頻三指飛屏
- activity 切換副螢屏,
- service中打開異屏懸浮窗
- 遺留問題
android 多屏異屏顯
作業組要對車機做成套軟體,三個螢屏,儀表,中控和副駕駛螢屏,軟體跨螢屏呼叫有音樂,視頻,副螢屏底部懸浮窗控制欄,視頻用到了三指飛屏,現在主要分享一下用到的代碼和使用范圍,
視頻三指飛屏
1.自定義viewgroup監聽viewGroup的touchevent,
下面展示一些 `行內代碼片`,
// 攔截判斷觸控點數
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
pointerCount = Math.max(ev.getPointerCount(), pointerCount);
if (pointerCount >= POINT_COUNT){
actionDownX = ev.getX();
return true;
}else {
return false;
}
}
2攔截之后監聽滑動操作
// 判斷滑動距離和方向
@Override
public boolean onTouchEvent(MotionEvent event) {
pointerCount = event.getPointerCount();
if (pointerCount >= POINT_COUNT){
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
Objects.requireNonNull(callback).onPressAction(true);
break;
case MotionEvent.ACTION_POINTER_UP:
if (event.getPointerCount() == POINT_COUNT) {
actionUpX = event.getX();
Log.e(TAG, "onTouchEvent: action up-----------" + actionUpX);
adjusScrollDirection();
}
break;
}
// gestureDetector.onTouchEvent(event);
return false;
}else {
return false;
}
}
activity 切換副螢屏,
// 跳轉副螢屏
public void newSecondActivity(int windowIndex) {
saveVideoProgress();
CurrentActivity = 1;
finish();
isChangeScreen = true;
Intent in = new Intent(this, SecondActivity.class);
ActivityOptions options = ActivityOptions.makeBasic();
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
options.setLaunchDisplayId(displays[windowIndex].getDisplayId());
startActivity(in, options.toBundle());
}
一個activity在另一個螢屏打開activity,需要傳入options的launchdisplayid,同時要設定intent的flag為Intent.FLAG_ACTIVITY_NEW_TASK
service中打開異屏懸浮窗
1.service打開懸浮窗這個就很有意思了,不像activity,有ActivityOptions,直接貼代碼
// 創建布局
public void toSecondScreen() {
DisplayManager mDisplayManager = (DisplayManager) this.getSystemService(Context.DISPLAY_SERVICE);
;//螢屏管理類
Display[] displays = mDisplayManager.getDisplays(); //得到顯示幕陣列;//螢屏陣列
Display secondDisplay = displays[1];
Context secondDisplayContext = createDisplayContext(secondDisplay);
mWindowManager = (WindowManager) secondDisplayContext.getSystemService(WINDOW_SERVICE);
mLayoutParams = new WindowManager.LayoutParams();
mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
// mLayoutParams.type = WindowManager.LayoutParams.TYPE_TOAST;
mLayoutParams.format = PixelFormat.RGBA_8888;
mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
mLayoutParams.x = 0;
mLayoutParams.y = 0;
cuslayout = new CustomContentLinearlayout(secondDisplayContext);
showLayout();
}
private void showLayout() {
if (isShow) {
Toast.makeText(this, "已經顯示", Toast.LENGTH_SHORT).show();
}
if (cuslayout != null) {
mWindowManager.addView(cuslayout, mLayoutParams);
isShow = true;
}
}
跟activity不同的是要 Context secondDisplayContext = createDisplayContext(secondDisplay);
創建一個displaycontex,然后才能設定螢屏id
遺留問題
1.0螢屏打開a后再關閉,1螢屏再打開a,仍然會出現在0螢屏,問題是出現在底層,video當時用的是a,b兩個activity,實作雙入口實作的,但只能治標不治本,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/271599.html
標籤:其他
上一篇:為什么Application不能作為Dialog的Context
下一篇:制作一個永遠不會崩潰的App
