添加机器视角点击放大缩小功能

This commit is contained in:
tongchenfei
2020-10-30 17:20:32 +08:00
parent 1aad4e8901
commit 350a3af59c
8 changed files with 98 additions and 10 deletions

View File

@@ -39,6 +39,10 @@ class DialogImpl implements IWindowManagerView {
dialog.show();
}
@Override
public void update(WindowManagerView.WMViewParams params) {
}
@Override
public void hide() {
/*

View File

@@ -27,6 +27,12 @@ interface IWindowManagerView {
*/
void show();
/**
* 更新界面位置或大小
* @param params 具体参数
*/
void update(WindowManagerView.WMViewParams params);
/**
* 隐藏
*/

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Build;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
/**
@@ -16,6 +17,8 @@ class WindowManagerImpl implements IWindowManagerView {
private WindowManagerView.WMViewParams mParams;
private boolean isShowing;
private View rootView;
private float mLastX, mLastY;
private int mOldOffsetX, mOldOffsetY;
@@ -23,6 +26,10 @@ class WindowManagerImpl implements IWindowManagerView {
public void init( WindowManagerView.WMViewParams params ) {
mParams = params;
mWindowManager = ( WindowManager ) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE );
generateLayoutParams();
}
private void generateLayoutParams(){
mLayoutParams = new WindowManager.LayoutParams();
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) {
mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
@@ -80,10 +87,20 @@ class WindowManagerImpl implements IWindowManagerView {
public void show() {
if ( !isShowing ) {
isShowing = true;
rootView = mParams.mContentView;
mWindowManager.addView( mParams.mContentView, mLayoutParams );
}
}
@Override
public void update(WindowManagerView.WMViewParams params) {
if (isShowing) {
mParams = params;
generateLayoutParams();
mWindowManager.updateViewLayout(rootView,mLayoutParams);
}
}
@Override
public void hide() {
if ( isShowing && mParams != null ) {

View File

@@ -116,4 +116,15 @@ public class WindowManagerView {
public int mY;
public int mGravity;
}
public void exchangeSizeAndPosition(int width, int height, int x, int y) {
if (isShowing()) {
mParams.mX = x;
mParams.mY = y;
mParams.mWidth = width;
mParams.mHeight = height;
mManagerView.update(mParams);
}
}
}

View File

@@ -51,11 +51,11 @@ class VrModeController {
}
public void onVrModeChanged( boolean isVrMode ) {
// if ( isVrMode ) {
// bindVrModeService();
// } else {
// unbindVrModeService();
// }
if ( isVrMode ) {
bindVrModeService();
} else {
unbindVrModeService();
}
}
private void bindVrModeService() {

View File

@@ -33,6 +33,8 @@ class MachineVisionMapService extends Service {
private WindowManagerView mMachineVisionMapViewManager;
private View mRootView;
private View mClickView;
private MachineVisionMapView mMapView;
@Nullable
@Override
@@ -111,6 +113,8 @@ class MachineVisionMapService extends Service {
}
}
private boolean isSmall = true;
private void addMachineVisionMapView() {
mMachineVisionMapViewManager = new WindowManagerView.Builder( getApplicationContext() )
.contentView( R.layout.module_mvision_layout_view )
@@ -125,8 +129,42 @@ class MachineVisionMapService extends Service {
.gravity( Gravity.TOP | Gravity.LEFT )
.showInWindowManager();
mRootView = mMachineVisionMapViewManager.findViewById( R.id.module_mvision_map_root );
MachineVisionMapViewHandler.getInstance().setMachineVisionMapView( mMachineVisionMapViewManager.findViewById( R.id.module_mvision_map_view ) );
mClickView = mMachineVisionMapViewManager.findViewById(R.id.module_mvision_map_click);
mMapView = mMachineVisionMapViewManager.findViewById(R.id.module_mvision_map_view);
MachineVisionMapViewHandler.getInstance().setMachineVisionMapView( mMapView );
mMachineVisionMapViewManager.show();
mClickView.setOnClickListener(v -> {
int width, height, x, y;
if (isSmall) {
// 变大
isSmall = false;
width = getResources().getDimensionPixelSize(R.dimen.module_mvision_big_view_width);
height = getResources().getDimensionPixelSize(R.dimen.module_mvision_big_view_height);
x = getResources().getDimensionPixelSize(R.dimen.module_mvision_big_view_x);
y = getResources().getDimensionPixelSize(R.dimen.module_mvision_big_view_y);
}else{
// 变小
isSmall = true;
width = getResources().getDimensionPixelSize(R.dimen.module_mvision_view_width);
height = getResources().getDimensionPixelSize(R.dimen.module_mvision_view_height);
x = getResources().getDimensionPixelSize(R.dimen.module_mvision_view_x);
y = getResources().getDimensionPixelSize(R.dimen.module_mvision_view_y);
}
mRootView.getLayoutParams().width = width;
mRootView.getLayoutParams().height = height;
mRootView.setLayoutParams(mRootView.getLayoutParams());
mClickView.getLayoutParams().width = width;
mClickView.getLayoutParams().height = height;
mClickView.setLayoutParams(mClickView.getLayoutParams());
mMapView.getLayoutParams().width = width;
mMapView.getLayoutParams().height = height;
mMapView.setLayoutParams(mMapView.getLayoutParams());
mMachineVisionMapViewManager.exchangeSizeAndPosition(width, height, x, y);
});
}
@Override
@@ -136,6 +174,8 @@ class MachineVisionMapService extends Service {
if ( mMachineVisionMapViewManager != null ) {
mMachineVisionMapViewManager.dismiss();
mRootView = null;
mClickView = null;
mMapView = null;
}
}
}

View File

@@ -8,4 +8,9 @@
android:id="@+id/module_mvision_map_view"
android:layout_width="@dimen/module_mvision_view_width"
android:layout_height="@dimen/module_mvision_view_height" />
<FrameLayout
android:layout_width="@dimen/module_mvision_view_width"
android:layout_height="@dimen/module_mvision_view_height"
android:id="@+id/module_mvision_map_click" />
</FrameLayout>

View File

@@ -1,7 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="module_mvision_view_width">960px</dimen>
<dimen name="module_mvision_view_height">540px</dimen>
<dimen name="module_mvision_view_x">300px</dimen>
<dimen name="module_mvision_view_y">100px</dimen>
<dimen name="module_mvision_view_width">460px</dimen>
<dimen name="module_mvision_view_height">460px</dimen>
<dimen name="module_mvision_view_x">204px</dimen>
<dimen name="module_mvision_view_y">368px</dimen>
<dimen name="module_mvision_big_view_x">0px</dimen>
<dimen name="module_mvision_big_view_y">0px</dimen>
<dimen name="module_mvision_big_view_width">1920px</dimen>
<dimen name="module_mvision_big_view_height">1080px</dimen>
</resources>