完善页面

chenghonghao_branch
MikkoAyaka 1 year ago
parent 08c773250c
commit 3c832de621

@ -15,7 +15,6 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<application <application
android:icon="@drawable/icon" android:icon="@drawable/icon"

@ -1,12 +1,34 @@
package wificar; package wificar;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
public class Configuration { public class Configuration {
public String videoUrl = "http://192.168.1.1:8080/?action=stream"; public String videoUrl = "http://192.168.1.1:8080/?action=stream";
public String controlIp = "192.168.1.1"; public String controlIp = "192.168.1.1";
public String controlPort = "2001"; public String controlPort = "2001";
public final List<String> suggestions = new ArrayList<>();
public boolean poseCheck = true;
public boolean needSaveScreenShot = false; public boolean needSaveScreenShot = false;
private Configuration(){} ThreadLocalRandom random;
private Configuration(){
random = ThreadLocalRandom.current();
suggestions.add("优先确认安全: 在搜救任务开始前,请确保救援队员和机器人的安全。评估搜救区域的潜在风险,并采取必要的安全措施。");
suggestions.add("建立通讯联系: 与被救援者建立有效的通讯联系,了解他们的状况、位置和任何紧急情况。稳定的通讯有助于更好地协调救援行动。");
suggestions.add("分析搜救区域: 对搜救区域进行细致的分析,了解可能的藏匿点和障碍物。这有助于制定更有效的搜救策略。");
suggestions.add("协同工作: 救援机器人应与救援队协同工作,相互支持。机器人可以用于进入危险区域,而救援队员则可以提供更多的人工智能无法覆盖的人文关怀。");
suggestions.add("紧急医疗救援: 如果搜救现场有伤者,立即调配医疗救援人员,优先进行紧急医疗救援。");
suggestions.add("数据采集: 利用机器人的传感器和摄像头收集详细的现场信息,有助于更准确地定位和救援被困者。");
}
public String getRandomSuggestion() {
return suggestions.get(random.nextInt(suggestions.size()));
}
private static Configuration INSTANCE; private static Configuration INSTANCE;
public static Configuration getInstance() { public static Configuration getInstance() {
if(INSTANCE == null) INSTANCE = new Configuration(); if(INSTANCE == null) INSTANCE = new Configuration();

@ -19,6 +19,7 @@ import android.graphics.Matrix;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.YuvImage; import android.graphics.YuvImage;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
@ -74,7 +75,7 @@ public class MySurfaceView extends SurfaceView implements Callback {
private boolean isThreadRunning = true; private boolean isThreadRunning = true;
private MyVideo activity; private MyVideo activity;
private ImageView floatingView; private MySurfaceView floatingView;
public MySurfaceView(Context context, AttributeSet attrs) { public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
@ -484,15 +485,15 @@ public class MySurfaceView extends SurfaceView implements Callback {
protected void showResultOnUI() { protected void showResultOnUI() {
if(floatingView == null) { if(floatingView == null) {
floatingView = activity.findViewById(R.id.floatingView); floatingView = activity.findViewById(R.id.mySurfaceViewVideo);
} }
activity.runOnUiThread(() -> { activity.runOnUiThread(() -> {
if(mutableBitmap == null)return; if(mutableBitmap == null)return;
floatingView.setImageBitmap(mutableBitmap); floatingView.setBackground(new BitmapDrawable(getResources(),mutableBitmap));
}); });
} }
protected Bitmap drawPersonPose(Bitmap mutableBitmap, KeyPoint[] keyPoints) { protected Bitmap drawPersonPose(Bitmap mutableBitmap, KeyPoint[] keyPoints) {
if (keyPoints == null || keyPoints.length <= 0) { if (keyPoints == null || keyPoints.length <= 0 || !Configuration.getInstance().poseCheck) {
return mutableBitmap; return mutableBitmap;
} }
int[][] joint_pairs = {{0, 1}, {1, 3}, {0, 2}, {2, 4}, {5, 6}, {5, 7}, {7, 9}, {6, 8}, {8, 10}, {5, 11}, {6, 12}, {11, 12}, {11, 13}, {12, 14}, {13, 15}, {14, 16}}; int[][] joint_pairs = {{0, 1}, {1, 3}, {0, 2}, {2, 4}, {5, 6}, {5, 7}, {7, 9}, {6, 8}, {8, 10}, {5, 11}, {6, 12}, {11, 12}, {11, 13}, {12, 14}, {13, 15}, {14, 16}};

@ -1,42 +1,32 @@
package wificar; package wificar;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.os.AsyncTask;
import android.graphics.Canvas;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.media.MediaScannerConnection;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import android.os.Message;
import android.os.StrictMode; import android.os.StrictMode;
import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.Surface;
import android.view.View; import android.view.View;
import android.view.Window; import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.ImageButton; import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SeekBar; import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.Socket; import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import my.wificar.R; import my.wificar.R;
@ -44,52 +34,160 @@ public class MyVideo extends Activity {
public static String CameraIp; public static String CameraIp;
public static String CtrlIp; public static String CtrlIp;
public static String CtrlPort; public static String CtrlPort;
URL videoUrl;
MySurfaceView r; MySurfaceView r;
OutputStream socketWriter; OutputStream socketWriter;
InputStream socketReader; InputStream socketReader;
SocketListener socketListener2001; SocketListener socketListener2001;
SoundSocketListener socketListener2002; SoundSocketListener socketListener2002;
SeekBar xSeekbar,ySeekbar; SeekBar xSeekbar;
Button menuIcon;
TextView distanceText,lifeCheckText,poseCheckText,suggestionText,avoidText;
CheckBox distanceBtn,lifeCheckBtn,poseCheckBtn,suggestionBtn,avoidBtn;
private Socket socket; private Socket socket;
private Socket soundSocket; private Socket soundSocket;
private RockerView rockerView; private RockerView rockerView;
LinearLayout menu;
private long exitTime = 0; private long exitTime = 0;
Timer timer = new Timer();
private boolean btnEnabled = false;
private List<View> menuContent = new ArrayList<>();
private void showMenuContent() {
for (View view : menuContent) {
view.setVisibility(View.VISIBLE);
}
}
private void hideMenuContent() {
for (View view : menuContent) {
view.setVisibility(View.GONE);
}
}
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐去标题应用的名字必须要写在setContentView之前否则会有异常
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
LinearLayout linearLayout = findViewById(R.id.linearLayout4); setContentView(R.layout.myvideo);
xSeekbar = linearLayout.findViewById(R.id.xSeekbar); timer.schedule(new TimerTask() {
ySeekbar = linearLayout.findViewById(R.id.ySeekbar);
xSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { public void run() {
while (true) {
try {
Thread.sleep(6000);
runOnUiThread(()->{
TextView textView = findViewById(R.id.suggestion);
textView.setText(Configuration.getInstance().getRandomSuggestion());
});
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}, 1000L, 1000L);
distanceText = findViewById(R.id.distanceText);
distanceBtn = findViewById(R.id.distanceBtn);
distanceBtn.setChecked(true);
distanceBtn.setOnClickListener(view -> {
CheckBox checkBox = (CheckBox) view;
LinearLayout layout = findViewById(R.id.distanceLayout);
if(checkBox.isChecked()) {
layout.setVisibility(View.VISIBLE);
} else layout.setVisibility(View.GONE);
});
lifeCheckText = findViewById(R.id.lifeCheckText);
lifeCheckBtn = findViewById(R.id.lifeCheckBtn);
lifeCheckBtn.setChecked(true);
lifeCheckBtn.setOnClickListener(view -> {
CheckBox checkBox = (CheckBox) view;
LinearLayout layout = findViewById(R.id.lifeCheckLayout);
if(checkBox.isChecked()) {
layout.setVisibility(View.VISIBLE);
} else layout.setVisibility(View.GONE);
});
poseCheckText = findViewById(R.id.poseCheckText);
poseCheckBtn = findViewById(R.id.poseCheckBtn);
poseCheckBtn.setChecked(true);
poseCheckBtn.setOnClickListener(view -> {
CheckBox checkBox = (CheckBox) view;
LinearLayout layout = findViewById(R.id.poseCheckLayout);
if(checkBox.isChecked()) {
layout.setVisibility(View.VISIBLE);
} else layout.setVisibility(View.GONE);
Configuration.getInstance().poseCheck = checkBox.isChecked();
});
suggestionText = findViewById(R.id.suggestionText);
suggestionBtn = findViewById(R.id.suggestionBtn);
suggestionBtn.setChecked(false);
suggestionBtn.setOnClickListener(view -> {
CheckBox checkBox = (CheckBox) view;
TextView textView = findViewById(R.id.suggestion);
if(checkBox.isChecked()) {
textView.setVisibility(View.VISIBLE);
} else textView.setVisibility(View.GONE);
});
avoidBtn = findViewById(R.id.avoidBtn);
avoidText = findViewById(R.id.avoidText);
avoidBtn.setOnClickListener(view -> {
CheckBox checkBox = (CheckBox) view;
if(checkBox.isChecked()) {
try { try {
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x07, (byte)((int)(progress * 1.8)), (byte) 0xff}); socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x13, (byte) 0x04, (byte)0x00, (byte) 0xff});
socketWriter.flush();
} catch (IOException e) {
runOnUiThread(()-> Toast.makeText(this,"网络异常!",Toast.LENGTH_SHORT).show());
throw new RuntimeException(e);
}
} else {
try {
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x13, (byte) 0x00, (byte)0x00, (byte) 0xff});
socketWriter.flush(); socketWriter.flush();
} catch (IOException e) { } catch (IOException e) {
runOnUiThread(()-> Toast.makeText(this,"网络异常!",Toast.LENGTH_SHORT).show());
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
@Override });
public void onStartTrackingTouch(SeekBar seekBar) {
} menuContent.add(distanceText);
menuContent.add(lifeCheckText);
menuContent.add(poseCheckText);
menuContent.add(suggestionText);
menuContent.add(distanceBtn);
menuContent.add(lifeCheckBtn);
menuContent.add(poseCheckBtn);
menuContent.add(suggestionBtn);
menuContent.add(avoidBtn);
menuContent.add(avoidText);
@Override hideMenuContent();
public void onStopTrackingTouch(SeekBar seekBar) {
} menu = findViewById(R.id.droppedMenu);
xSeekbar = findViewById(R.id.xSeekbar);
menuIcon = findViewById(R.id.menuIcon);
menuIcon.setOnClickListener(view -> {
btnEnabled = !btnEnabled;
if(btnEnabled) {
showMenuContent();
} else hideMenuContent();
}); });
ySeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
xSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
try { try {
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x08, (byte)((int)(progress * 1.8)), (byte) 0xff}); if(socketWriter == null) return;
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x08, (byte)((int)(progress * 0.9)+45), (byte) 0xff});
socketWriter.flush(); socketWriter.flush();
} catch (IOException e) { } catch (IOException e) {
@ -106,10 +204,6 @@ public class MyVideo extends Activity {
} }
}); });
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐去标题应用的名字必须要写在setContentView之前否则会有异常
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.myvideo);
if (android.os.Build.VERSION.SDK_INT > 9) { if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); StrictMode.setThreadPolicy(policy);
@ -129,28 +223,28 @@ public class MyVideo extends Activity {
public void InitSocket(Activity activity) { public void InitSocket(Activity activity) {
// TODO ²âÊÔ // TODO ²âÊÔ
// try { try {
// socket = new Socket(InetAddress.getByName(CtrlIp), Integer.parseInt(CtrlPort)); socket = new Socket(InetAddress.getByName(CtrlIp), Integer.parseInt(CtrlPort));
// soundSocket = new Socket(InetAddress.getByName(CtrlIp), 2002); soundSocket = new Socket(InetAddress.getByName(CtrlIp), 2002);
// } catch (UnknownHostException e) { } catch (UnknownHostException e) {
// // TODO Auto-generated catch block // TODO Auto-generated catch block
// e.printStackTrace(); e.printStackTrace();
// } catch (Exception e) { } catch (Exception e) {
// // TODO Auto-generated catch block // TODO Auto-generated catch block
// e.printStackTrace(); e.printStackTrace();
// } }
// try { try {
// socketWriter = socket.getOutputStream(); socketWriter = socket.getOutputStream();
// socketReader = socket.getInputStream(); socketReader = socket.getInputStream();
// socketListener2001 = new SocketListener(activity,socketReader); socketListener2001 = new SocketListener(activity,socketReader);
// socketListener2002 = new SoundSocketListener(activity,soundSocket.getInputStream()); socketListener2002 = new SoundSocketListener(activity,soundSocket.getInputStream());
// } catch (Exception e) { } catch (Exception e) {
// // TODO Auto-generated catch block // TODO Auto-generated catch block
// e.printStackTrace(); e.printStackTrace();
// } }
LinearLayout rockerLayout = findViewById(R.id.rocketLayout);
rockerView = new RockerView(this,socketWriter,this.getApplicationContext(),null); rockerView = new RockerView(this,socketWriter,this.getApplicationContext(),null);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(1000,1000); rockerLayout.addView(rockerView);
addContentView(rockerView,params);
//Toast.makeText(this,"³õʼ»¯ÍøÂçʧ°Ü£¡"+e.getMessage(),Toast.LENGTH_LONG).show(); //Toast.makeText(this,"³õʼ»¯ÍøÂçʧ°Ü£¡"+e.getMessage(),Toast.LENGTH_LONG).show();
} }

@ -23,14 +23,17 @@ public class RockerView extends View{
Paint backPaint = new Paint(); // 背景画笔 Paint backPaint = new Paint(); // 背景画笔
Paint bubblePaint = new Paint(); // 气泡画笔 Paint bubblePaint = new Paint(); // 气泡画笔
Paint rectfPaint = new Paint(); Paint rectfPaint = new Paint();
float bubbleX = 300, bubbleY = 700; // 定义气泡的位置 float bubbleX = 200, bubbleY = 200; // 定义气泡的位置
float backX = 300, backY = 700; // 背景圆的位置 float backX = 200, backY = 200; // 背景圆的位置
int radiusBack = 200, radiusBubble = 100; // 定义背景圆以及气泡的半径 int radiusBack = 200, radiusBubble = 100; // 定义背景圆以及气泡的半径
RectF mRectF = new RectF(backX-radiusBack,backY-radiusBack,backX+radiusBack,backY+radiusBack); RectF mRectF = new RectF(backX-radiusBack,backY-radiusBack,backX+radiusBack,backY+radiusBack);
Context mContext; Context mContext;
OutputStream socketWriter; OutputStream socketWriter;
String status = "STOP"; String status = "STOP";
private Activity activity; Activity activity;
public RockerView(Context context) {
super(context);
}
public RockerView(Activity activity,OutputStream socketWriter,Context context, @Nullable AttributeSet attrs) { public RockerView(Activity activity,OutputStream socketWriter,Context context, @Nullable AttributeSet attrs) {
super(context, attrs); super(context, attrs);
this.activity = activity; this.activity = activity;

@ -45,6 +45,7 @@ public class SocketListener {
} }
} }
}); });
AsyncTask.execute(()->{ AsyncTask.execute(()->{
while(true) { while(true) {
try { try {

@ -40,7 +40,7 @@
app:layout_constraintTop_toTopOf="@+id/textView" /> app:layout_constraintTop_toTopOf="@+id/textView" />
<LinearLayout <LinearLayout
android:id="@+id/linearLayout2" android:id="@+id/poseCheckLayout"
android:layout_width="270dp" android:layout_width="270dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="5dp" android:layout_marginStart="5dp"

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/constraintParent"
android:layout_width="fill_parent" android:layout_width="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="fill_parent"> android:layout_height="fill_parent">
@ -12,7 +13,21 @@
<!-- android:layout_marginBottom="200dp"--> <!-- android:layout_marginBottom="200dp"-->
<!-- android:visibility="visible"--> <!-- android:visibility="visible"-->
<!-- tools:visibility="visible" />--> <!-- tools:visibility="visible" />-->
<wificar.MySurfaceView
android:id="@+id/mySurfaceViewVideo"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<LinearLayout
android:id="@+id/rocketLayout"
android:layout_width="200dp"
android:layout_height="200dp"
app:layout_constraintBottom_toBottomOf="@+id/mySurfaceViewVideo"
app:layout_constraintStart_toStartOf="parent"
app:flow_horizontalAlign="center"
app:flow_verticalAlign="center"
android:orientation="horizontal" />
<Button <Button
android:id="@+id/menuIcon" android:id="@+id/menuIcon"
android:layout_width="60dp" android:layout_width="60dp"
@ -29,21 +44,92 @@
android:animateLayoutChanges="true" android:animateLayoutChanges="true"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo" app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo"
android:gravity="right"
app:layout_constraintTop_toBottomOf="@+id/menuIcon"> app:layout_constraintTop_toBottomOf="@+id/menuIcon">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/distanceText"
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="超声波距离显示" />
<CheckBox
android:id="@+id/distanceBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/lifeCheckText"
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="生命体征检测" />
<CheckBox
android:id="@+id/lifeCheckBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/poseCheckText"
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关节特征识别" />
<CheckBox
android:id="@+id/poseCheckBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:id="@+id/suggestionLayout"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/suggestionText"
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查看搜救建议" />
<CheckBox
android:checked="false"
android:id="@+id/suggestionBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:id="@+id/avoidLayout"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/avoidText"
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="超声波自动避障" />
<CheckBox
android:checked="false"
android:id="@+id/avoidBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout> </LinearLayout>
<wificar.MySurfaceView
android:id="@+id/mySurfaceViewVideo"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<LinearLayout <LinearLayout
android:id="@+id/linearLayout4" android:id="@+id/linearLayout4"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="30dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
@ -52,7 +138,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="#ffffff" android:textColor="#ffffff"
android:textSize="18dp" android:textSize="18dp"
android:text="舵机X轴" /> android:text="舵机控制" />
<SeekBar <SeekBar
android:id="@+id/xSeekbar" android:id="@+id/xSeekbar"
android:progress="50" android:progress="50"
@ -60,34 +146,14 @@
android:layout_height="30dp" /> android:layout_height="30dp" />
</LinearLayout> </LinearLayout>
<LinearLayout <!-- <ImageView-->
android:layout_width="wrap_content" <!-- android:id="@+id/floatingView"-->
android:layout_height="wrap_content" <!-- android:layout_width="match_parent"-->
app:layout_constraintEnd_toEndOf="parent" <!-- android:layout_height="match_parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintTop_toTopOf="parent" />-->
app:layout_constraintTop_toBottomOf="@+id/linearLayout4">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="舵机Y轴"
android:textColor="#ffffff"
android:textSize="18dp" />
<SeekBar
android:id="@+id/ySeekbar"
android:layout_width="300dp"
android:progress="50"
android:layout_height="30dp" />
</LinearLayout>
<ImageView
android:id="@+id/floatingView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout <LinearLayout
android:id="@+id/linearLayout2" android:id="@+id/poseCheckLayout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
@ -101,7 +167,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="25dp" android:layout_height="25dp"
android:layout_marginRight="10dp" android:layout_marginRight="10dp"
android:text="关节特征识别 启用" android:text="关节特征识别"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:textSize="18dp" android:textSize="18dp"
android:textStyle="bold" /> android:textStyle="bold" />
@ -115,12 +181,12 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/linearLayout3" android:id="@+id/lifeCheckLayout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@+id/linearLayout2" android:layout_above="@+id/poseCheckLayout"
android:layout_alignEnd="@+id/linearLayout2" android:layout_alignEnd="@+id/poseCheckLayout"
app:layout_constraintBottom_toTopOf="@+id/linearLayout2" app:layout_constraintBottom_toTopOf="@+id/poseCheckLayout"
app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo"> app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo">
<TextView <TextView
@ -151,12 +217,13 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/distanceLayout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@+id/linearLayout3" android:layout_above="@+id/lifeCheckLayout"
android:layout_alignEnd="@+id/linearLayout3" android:layout_alignEnd="@+id/lifeCheckLayout"
android:gravity="right" android:gravity="right"
app:layout_constraintBottom_toTopOf="@+id/linearLayout3" app:layout_constraintBottom_toTopOf="@+id/lifeCheckLayout"
app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo"> app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo">
<TextView <TextView
@ -176,6 +243,17 @@
android:text="0" android:text="0"
android:textColor="#FFFFFF" android:textColor="#FFFFFF"
android:textSize="20dp" /> android:textSize="20dp" />
</LinearLayout> </LinearLayout>
<TextView
android:textSize="16dp"
android:visibility="gone"
android:id="@+id/suggestion"
android:textColor="#00FF35"
android:text="搜救建议:暂无"
android:layout_width="450dp"
android:layout_height="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save