From c55bf3bb235301c1009cb02d434590c295cfe0dd Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 12 Aug 2020 10:41:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E8=88=AA=E6=98=BE=E7=A4=BA=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/module/common/wm/DialogImpl.java | 5 ++ .../module/common/wm/IWindowManagerView.java | 15 +++++- .../module/common/wm/WindowManagerImpl.java | 52 ++++++++++++++----- .../module/common/wm/WindowManagerView.java | 4 ++ .../service/intent/AutoNaviIntentHandler.java | 9 +--- .../layout/module_service_app_entrance.xml | 6 +-- .../src/main/res/values-ldpi/dimens.xml | 9 ++-- .../src/main/res/values-mdpi/dimens.xml | 9 ++-- .../res/values-xhdpi-1920x1000/dimens.xml | 3 ++ .../src/main/res/values-xhdpi/dimens.xml | 3 ++ .../src/main/res/values/dimens.xml | 3 ++ .../src/main/res/values/strings.xml | 2 +- 12 files changed, 90 insertions(+), 30 deletions(-) diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java index 72c5960fd4..a7bcb305c1 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java @@ -29,6 +29,11 @@ class DialogImpl implements IWindowManagerView { return dialog.isShowing(); } + @Override + public void handleTouchEvent(OnViewClickListener listener) { + // do nothings. + } + @Override public void show() { dialog.show(); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java index d610cea67a..14891ed7d6 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java @@ -1,18 +1,27 @@ package com.mogo.module.common.wm; +import android.view.View; + interface IWindowManagerView { /** * 初始化 + * * @param params contentView包装类 */ - void init(WindowManagerView.WMViewParams params); + void init( WindowManagerView.WMViewParams params ); /** * 是否显示 + * * @return true - 显示中 */ boolean isShowing(); + /** + * 支持手势拖动,该操作只支持触发点击操作 + */ + void handleTouchEvent(OnViewClickListener listener); + /** * 显示 */ @@ -22,4 +31,8 @@ interface IWindowManagerView { * 隐藏 */ void hide(); + + interface OnViewClickListener { + void onClick( View view ); + } } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java index 7aa61980f9..d4314d4106 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java @@ -3,12 +3,9 @@ package com.mogo.module.common.wm; import android.content.Context; import android.graphics.PixelFormat; import android.os.Build; -import android.view.Gravity; +import android.view.MotionEvent; import android.view.WindowManager; -import com.mogo.module.common.utils.CarSeries; -import com.mogo.utils.WindowUtils; - /** * 采用windowManager实现接口 */ @@ -19,10 +16,13 @@ class WindowManagerImpl implements IWindowManagerView { private WindowManagerView.WMViewParams mParams; private boolean isShowing; + private float mLastX, mLastY; + private int mOldOffsetX, mOldOffsetY; + @Override - public void init(WindowManagerView.WMViewParams params) { + public void init( WindowManagerView.WMViewParams params ) { mParams = params; - mWindowManager = (WindowManager) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE ); + mWindowManager = ( WindowManager ) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE ); mLayoutParams = new WindowManager.LayoutParams(); if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) { mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; @@ -35,8 +35,8 @@ class WindowManagerImpl implements IWindowManagerView { mLayoutParams.width = mParams.mWidth; mLayoutParams.height = mParams.mHeight; - mLayoutParams.x = mParams.mX; - mLayoutParams.y = mParams.mY; + mOldOffsetX = mLayoutParams.x = mParams.mX; + mOldOffsetY = mLayoutParams.y = mParams.mY; mLayoutParams.dimAmount = 0.5f; } @@ -45,18 +45,46 @@ class WindowManagerImpl implements IWindowManagerView { return isShowing; } + @Override + public void handleTouchEvent(OnViewClickListener listener) { + mParams.mContentView.setOnTouchListener( ( v, event ) -> { + final int action = event.getAction(); + float x = event.getX(); + float y = event.getY(); + if ( action == MotionEvent.ACTION_DOWN ) { + mLastX = x; + mLastY = y; + } else if ( action == MotionEvent.ACTION_MOVE ) { + mLayoutParams.x += ( int ) ( x - mLastX ) / 3; // 减小偏移量,防止过度抖动 + mLayoutParams.y += ( int ) ( y - mLastY ) / 3; // 减小偏移量,防止过度抖动 + mWindowManager.updateViewLayout( mParams.mContentView, mLayoutParams ); + } else if ( action == MotionEvent.ACTION_UP ) { + int newOffsetX = mLayoutParams.x; + int newOffsetY = mLayoutParams.y; + // 只要按钮一动位置不是很大,就认为是点击事件 + if ( Math.abs( mOldOffsetX - newOffsetX ) <= 20 + && Math.abs( mOldOffsetY - newOffsetY ) <= 20 ) { + listener.onClick( mParams.mContentView ); + } + mOldOffsetX = newOffsetX; + mOldOffsetY = newOffsetY; + } + return true; + } ); + } + @Override public void show() { - if(!isShowing){ + if ( !isShowing ) { isShowing = true; - mWindowManager.addView(mParams.mContentView,mLayoutParams); + mWindowManager.addView( mParams.mContentView, mLayoutParams ); } } @Override public void hide() { - if (isShowing && mParams != null) { - mWindowManager.removeView(mParams.mContentView); + if ( isShowing && mParams != null ) { + mWindowManager.removeView( mParams.mContentView ); isShowing = false; } } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java index 215f832b6c..db2b244273 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java @@ -33,6 +33,10 @@ public class WindowManagerView { return mParams.mContentView.findViewById( id ); } + public void attachTouchEvent( IWindowManagerView.OnViewClickListener listener ) { + mManagerView.handleTouchEvent(listener); + } + public void show() { mManagerView.show(); } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AutoNaviIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AutoNaviIntentHandler.java index 7e98a5a052..67be36f424 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AutoNaviIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AutoNaviIntentHandler.java @@ -2,9 +2,7 @@ package com.mogo.module.service.intent; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.view.Gravity; -import android.view.View; import android.view.WindowManager; import com.mogo.commons.AbsMogoApplication; @@ -12,8 +10,6 @@ import com.mogo.commons.debug.DebugConfig; import com.mogo.module.common.wm.WindowManagerView; import com.mogo.module.service.MarkerServiceHandler; import com.mogo.module.service.R; -import com.mogo.module.service.receiver.MogoReceiver; -import com.mogo.utils.AppUtils; import com.mogo.utils.LaunchUtils; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.logger.Logger; @@ -96,11 +92,10 @@ class AutoNaviIntentHandler implements IntentHandler { mWindowManagerView = new WindowManagerView.Builder( AbsMogoApplication.getApp() ) .contentView( R.layout.module_service_app_entrance ) .size( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT ) + .gravity( Gravity.LEFT | Gravity.TOP ) .position( ResourcesHelper.getDimensionPixelSize( context, R.dimen.module_services_app_entrance_x ), ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_services_app_entrance_y ) ) - .gravity( Gravity.LEFT|Gravity.TOP ) .showInWindowManager(); - View root = mWindowManagerView.findViewById( R.id.module_service_app_entrance_root ); - root.setOnClickListener( view -> { + mWindowManagerView.attachTouchEvent( view -> { try { if ( DebugConfig.isLauncher() ) { MarkerServiceHandler.getLauncher().backToLauncher( context ); diff --git a/modules/mogo-module-service/src/main/res/layout/module_service_app_entrance.xml b/modules/mogo-module-service/src/main/res/layout/module_service_app_entrance.xml index 7c54d93ab8..0c8bb8cadd 100644 --- a/modules/mogo-module-service/src/main/res/layout/module_service_app_entrance.xml +++ b/modules/mogo-module-service/src/main/res/layout/module_service_app_entrance.xml @@ -7,9 +7,9 @@ android:orientation="vertical"> diff --git a/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml index 4114da3f4b..871507f1ab 100644 --- a/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml @@ -22,9 +22,12 @@ 64px 6.5px 10px - 19px + 20px 15px 2px - 24px - 498px + 112px + 929px + 10px + 15px + 71px \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values-mdpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-mdpi/dimens.xml index 4114da3f4b..871507f1ab 100644 --- a/modules/mogo-module-service/src/main/res/values-mdpi/dimens.xml +++ b/modules/mogo-module-service/src/main/res/values-mdpi/dimens.xml @@ -22,9 +22,12 @@ 64px 6.5px 10px - 19px + 20px 15px 2px - 24px - 498px + 112px + 929px + 10px + 15px + 71px \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values-xhdpi-1920x1000/dimens.xml b/modules/mogo-module-service/src/main/res/values-xhdpi-1920x1000/dimens.xml index 1ccedd1fee..1e58e34c84 100644 --- a/modules/mogo-module-service/src/main/res/values-xhdpi-1920x1000/dimens.xml +++ b/modules/mogo-module-service/src/main/res/values-xhdpi-1920x1000/dimens.xml @@ -27,4 +27,7 @@ 4px 48px 1000px + 10px + 15px + 71px \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml index 1ccedd1fee..1e58e34c84 100644 --- a/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml @@ -27,4 +27,7 @@ 4px 48px 1000px + 10px + 15px + 71px \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values/dimens.xml b/modules/mogo-module-service/src/main/res/values/dimens.xml index 1ccedd1fee..1e58e34c84 100644 --- a/modules/mogo-module-service/src/main/res/values/dimens.xml +++ b/modules/mogo-module-service/src/main/res/values/dimens.xml @@ -27,4 +27,7 @@ 4px 48px 1000px + 10px + 15px + 71px \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values/strings.xml b/modules/mogo-module-service/src/main/res/values/strings.xml index 00488f2df6..e25a4adb00 100644 --- a/modules/mogo-module-service/src/main/res/values/strings.xml +++ b/modules/mogo-module-service/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ mogo-module-service - 切换辅助驾驶模式 + 辅助\n驾驶