Compare commits

...

4 Commits

@ -52,6 +52,7 @@ android {
}
dependencies {
implementation 'io.github.litao0621:nifty-slider:1.4.6'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'

@ -7,12 +7,14 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="adnroid.permission.CHANGE_WIFI_STATE" /> <!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" /> <!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.VIBRATE" />
<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_EXTERNAL_STORAGE" />
<application
android:icon="@drawable/icon"

@ -0,0 +1,37 @@
package wificar;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
public class Configuration {
public String videoUrl = "http://192.168.1.1:8080/?action=stream";
public String controlIp = "192.168.1.1";
public String controlPort = "2001";
public final List<String> suggestions = new ArrayList<>();
public boolean poseCheck = true;
public boolean needSaveScreenShot = false;
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;
public static Configuration getInstance() {
if(INSTANCE == null) INSTANCE = new Configuration();
return INSTANCE;
}
}

@ -27,7 +27,7 @@ import my.wificar.R;
public class MyMainFrm extends Activity {
EditText CameraIP, ControlIP, Port;
// EditText CameraIP, ControlIP, Port;
LinearLayout Button_go;
LinearLayout Button_set;
String videoUrl, controlUrl, port;
@ -55,16 +55,12 @@ public class MyMainFrm extends Activity {
setContentView(R.layout.mymainfrm);
CameraIP = findViewById(R.id.editIP);
ControlIP = findViewById(R.id.ip);
Port = findViewById(R.id.port);
Button_go = findViewById(R.id.button_go);
Button_set = findViewById(R.id.button_set);
videoUrl = CameraIP.getText().toString();
controlUrl = ControlIP.getText().toString();
port = Port.getText().toString();
videoUrl = Configuration.getInstance().videoUrl;
controlUrl = Configuration.getInstance().controlIp;
port = Configuration.getInstance().controlPort;
Button_go.requestFocusFromTouch();
Button_set.requestFocusFromTouch();

@ -19,8 +19,10 @@ import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.YuvImage;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
@ -45,6 +47,7 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.ByteBuffer;
@ -72,7 +75,7 @@ public class MySurfaceView extends SurfaceView implements Callback {
private boolean isThreadRunning = true;
private MyVideo activity;
private ImageView floatingView;
private MySurfaceView floatingView;
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
@ -377,6 +380,10 @@ public class MySurfaceView extends SurfaceView implements Callback {
false);
//TODO »ñÈ¡µ½ bitmap ÁË
if(Configuration.getInstance().needSaveScreenShot) {
saveBitmap(mBitmap);
Configuration.getInstance().needSaveScreenShot = false;
}
detectOnModel(mBitmap);
canvas.drawBitmap(
mBitmap,
@ -457,6 +464,17 @@ public class MySurfaceView extends SurfaceView implements Callback {
private static boolean useCamera = true;
private void saveBitmap(Bitmap bmp) throws IOException {
File childFolder = Environment.getExternalStoragePublicDirectory(Environment
.DIRECTORY_PICTURES);
File imageFile = new File(childFolder.getAbsolutePath() + "/" + System.currentTimeMillis
() + ".jpg");
OutputStream fOut = new FileOutputStream(imageFile);
bmp.compress(Bitmap.CompressFormat.JPEG, 60, fOut);//½«bgÊä³öÖÁÎļþ
fOut.flush();
fOut.close(); // do not forget to close the stream
activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageFile)));
}
private void detectOnModel(Bitmap image) {
startTime = System.currentTimeMillis();
detectService.execute(() -> {
@ -467,15 +485,15 @@ public class MySurfaceView extends SurfaceView implements Callback {
protected void showResultOnUI() {
if(floatingView == null) {
floatingView = activity.findViewById(R.id.floatingView);
floatingView = activity.findViewById(R.id.mySurfaceViewVideo);
}
activity.runOnUiThread(() -> {
if(mutableBitmap == null)return;
floatingView.setImageBitmap(mutableBitmap);
floatingView.setBackground(new BitmapDrawable(getResources(),mutableBitmap));
});
}
protected Bitmap drawPersonPose(Bitmap mutableBitmap, KeyPoint[] keyPoints) {
if (keyPoints == null || keyPoints.length <= 0) {
if (keyPoints == null || keyPoints.length <= 0 || !Configuration.getInstance().poseCheck) {
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}};
@ -520,11 +538,14 @@ public class MySurfaceView extends SurfaceView implements Callback {
protected Bitmap detectAndDraw(Bitmap image) {
Box[] result = null;
KeyPoint[] keyPoints = null;
KeyPoint[] keyPoints;
if (USE_MODEL == YOLOV5S) {
keyPoints = null;
result = YOLOv5.detect(image, threshold, nms_threshold);
} else if (USE_MODEL == SIMPLE_POSE) {
keyPoints = SimplePose.detect(image);
} else {
keyPoints = null;
}
if (result == null && keyPoints == null) {
detectCamera.set(false);

@ -2,29 +2,29 @@ package wificar;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.BinderThread;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;
import java.sql.Time;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
@ -34,28 +34,181 @@ public class MyVideo extends Activity {
public static String CameraIp;
public static String CtrlIp;
public static String CtrlPort;
URL videoUrl;
MySurfaceView r;
OutputStream socketWriter;
private ImageButton TakePhotos;
private ImageButton ViewPhotos;
InputStream socketReader;
SocketListener socketListener2001;
SoundSocketListener socketListener2002;
SeekBar xSeekbar;
Button menuIcon;
TextView distanceText,lifeCheckText,poseCheckText,suggestionText,avoidText;
CheckBox distanceBtn,lifeCheckBtn,poseCheckBtn,suggestionBtn,avoidBtn;
private Socket socket;
private Socket soundSocket;
private RockerView rockerView;
LinearLayout menu;
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
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐去标题应用的名字必须要写在setContentView之前否则会有异常
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.myvideo);
timer.schedule(new TimerTask() {
@Override
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 {
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();
} catch (IOException e) {
runOnUiThread(()-> Toast.makeText(this,"网络异常!",Toast.LENGTH_SHORT).show());
throw new RuntimeException(e);
}
}
});
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);
hideMenuContent();
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();
});
xSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
try {
if(socketWriter == null) return;
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x08, (byte)((int)(progress * 0.9)+45), (byte) 0xff});
socketWriter.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
r = findViewById(R.id.mySurfaceViewVideo);
TakePhotos = findViewById(R.id.TakePhoto);
ViewPhotos = findViewById(R.id.ViewPhoto);
Intent intent = getIntent();
//从Intent当中根据key取得value
@ -65,31 +218,14 @@ public class MyVideo extends Activity {
Log.d("wifirobot", "control is :++++" + CtrlIp);
Log.d("wifirobot", "CtrlPort is :++++" + CtrlPort);
r.GetCameraIP(CameraIp);
TakePhotos.setOnClickListener(arg0 -> {
// TODO Auto-generated method stub
if (null != Constant.handler) {
Message message = new Message();
message.what = 1;
Constant.handler.sendMessage(message);
InitSocket(this);
}
});
ViewPhotos.setOnClickListener(arg0 -> {
// TODO Auto-generated method stub
Intent intent1 = new Intent();
intent1.setClass(MyVideo.this, BgPictureShowActivity.class);
//ͨ¹ýIntent¶ÔÏóÆô¶¯ÁíÍâÒ»¸öActivity
MyVideo.this.startActivity(intent1);
});
new Thread(()->InitSocket()).run();
}
public void InitSocket() {
public void InitSocket(Activity activity) {
// TODO 测试
try {
socket = new Socket(InetAddress.getByName(CtrlIp), Integer.parseInt(CtrlPort));
soundSocket = new Socket(InetAddress.getByName(CtrlIp), 2002);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
@ -99,19 +235,21 @@ public class MyVideo extends Activity {
}
try {
socketWriter = socket.getOutputStream();
socketReader = socket.getInputStream();
socketListener2001 = new SocketListener(activity,socketReader);
socketListener2002 = new SoundSocketListener(activity,soundSocket.getInputStream());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LinearLayout rockerLayout = findViewById(R.id.rocketLayout);
rockerView = new RockerView(this,socketWriter,this.getApplicationContext(),null);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(1000,1000);
addContentView(rockerView,params);
rockerLayout.addView(rockerView);
//Toast.makeText(this,"初始化网络失败!"+e.getMessage(),Toast.LENGTH_LONG).show();
}
public void onDestroy() {
super.onDestroy();
}
@Override

@ -23,14 +23,17 @@ public class RockerView extends View{
Paint backPaint = new Paint(); // 背景画笔
Paint bubblePaint = new Paint(); // 气泡画笔
Paint rectfPaint = new Paint();
float bubbleX = 300, bubbleY = 700; // 定义气泡的位置
float backX = 300, backY = 700; // 背景圆的位置
float bubbleX = 200, bubbleY = 200; // 定义气泡的位置
float backX = 200, backY = 200; // 背景圆的位置
int radiusBack = 200, radiusBubble = 100; // 定义背景圆以及气泡的半径
RectF mRectF = new RectF(backX-radiusBack,backY-radiusBack,backX+radiusBack,backY+radiusBack);
Context mContext;
OutputStream socketWriter;
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) {
super(context, attrs);
this.activity = activity;

@ -0,0 +1,89 @@
package wificar;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Environment;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.loader.content.AsyncTaskLoader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import my.wificar.R;
public class SocketListener {
private Activity activity;
private InputStream inputStream;
public SocketListener(Activity activity,InputStream inputStream) {
this.activity = activity;
this.inputStream = inputStream;
AsyncTask.execute(()->{
while (true) {
try {
if (inputStream.available() != 0) {
int value = inputStream.read();
int input1 = value % 2;
int input2 = value >> 1;
onMessage1(input1);
onMessage2(input2);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});
AsyncTask.execute(()->{
while(true) {
try {
Thread.sleep(1000);
onMessage1(0);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
}
int count = 0;
private void onMessage1(int inputValue) {
//TODO
activity.runOnUiThread(()->{
TextView textComponent = activity.findViewById(R.id.showLive);
ImageView redCircle = activity.findViewById(R.id.redCircle);
ImageView greenCircle = activity.findViewById(R.id.greenCircle);
if(inputValue == 1) {
textComponent.setText("画面中存在生命体");
greenCircle.setVisibility(View.VISIBLE);
redCircle.setVisibility(View.GONE);
count++;
if(count >= 60) {
count = 0;
Configuration.getInstance().needSaveScreenShot = true;
}
} else {
textComponent.setText("画面中未检测到生命体");
greenCircle.setVisibility(View.GONE);
redCircle.setVisibility(View.VISIBLE);
}
});
}
private void onMessage2(int inputValue) {
activity.runOnUiThread(()->{
TextView textView = activity.findViewById(R.id.distance);
textView.setText(inputValue+"");
});
}
}

@ -0,0 +1,54 @@
package wificar;
import android.app.Activity;
import android.os.AsyncTask;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import my.wificar.R;
public class SoundSocketListener {
private Activity activity;
private InputStream inputStream;
public SoundSocketListener(Activity activity, InputStream inputStream) {
this.activity = activity;
this.inputStream = inputStream;
AsyncTask.execute(()->{
while (true) {
try {
if (inputStream.available() != 0) {
if(inputStream.read() == 255) {
int value = inputStream.read();
if(inputStream.read() == 255) {
onMessage(value);
}
}
if(inputStream.read() == 254) {
int value = inputStream.read();
if(inputStream.read() == 254) {
activity.runOnUiThread(()->{
Toast.makeText(activity,"³¬Éù²¨Êý¾Ý£º"+value,Toast.LENGTH_SHORT).show();
});
}
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});
}
private void onMessage(int inputValue) {
//TODO
activity.runOnUiThread(()->{
Toast.makeText(activity, inputValue, Toast.LENGTH_SHORT).show();
});
}
}

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="60dp" />
<gradient
android:angle="0"
android:centerColor="#F39801"
android:centerY="0.20"
android:endColor="#F39801"
android:startColor="#F39801" />
</shape>
</item>
</layer-list>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
>
<corners
android:radius="100dp"
/>
<solid
android:color="#B2FF0000"
/>
<size
android:width="100dp"
android:height="100dp"
/>
</shape>

@ -32,7 +32,7 @@
android:id="@+id/button6"
android:layout_width="100dp"
android:layout_height="35dp"
android:layout_marginStart="144dp"
android:layout_marginStart="130dp"
android:text="绝对位置模式"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/textView"
@ -40,10 +40,10 @@
app:layout_constraintTop_toTopOf="@+id/textView" />
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="312dp"
android:id="@+id/poseCheckLayout"
android:layout_width="270dp"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginStart="5dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="@+id/button7"
app:layout_constraintStart_toEndOf="@+id/button7"
@ -62,7 +62,7 @@
android:id="@+id/defaultsetting"
android:layout_width="135dp"
android:layout_height="40dp"
android:layout_marginStart="49dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="50dp"
android:text="恢复默认设置"
android:textSize="15sp"
@ -94,7 +94,7 @@
android:id="@+id/button7"
android:layout_width="100dp"
android:layout_height="35dp"
android:layout_marginStart="32dp"
android:layout_marginStart="5dp"
android:text="相对位置模式"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/button6"
@ -144,13 +144,14 @@
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editTextText52"
android:id="@+id/controlPort"
android:layout_width="125dp"
android:layout_height="25dp"
android:layout_height="40dp"
android:clickable="true"
android:ems="10"
android:includeFontPadding="false"
android:inputType="text"
android:text="2001"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingRight="16dp"
@ -160,22 +161,24 @@
app:layout_constraintStart_toEndOf="@+id/textView55" />
<TextView
android:visibility="gone"
android:id="@+id/textView54"
android:layout_width="100dp"
android:layout_height="25dp"
android:gravity="center"
android:text="视频地址2"
android:text="视频地址2"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/textView53"
app:layout_constraintTop_toBottomOf="@+id/textView53" />
<EditText
android:id="@+id/editTextText51"
android:layout_width="492dp"
android:layout_height="25dp"
android:id="@+id/videoUrl"
android:layout_width="350dp"
android:layout_height="40dp"
android:clickable="true"
android:ems="10"
android:text="http://192.168.1.1:8080/?action=stream"
android:includeFontPadding="false"
android:inputType="text"
android:paddingLeft="16dp"
@ -186,22 +189,6 @@
app:layout_constraintBottom_toBottomOf="@+id/textView53"
app:layout_constraintStart_toEndOf="@+id/textView53" />
<EditText
android:id="@+id/editTextText50"
android:layout_width="492dp"
android:layout_height="25dp"
android:clickable="true"
android:ems="10"
android:includeFontPadding="false"
android:inputType="text"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingRight="16dp"
android:paddingBottom="8dp"
android:textSize="16dp"
app:layout_constraintBottom_toBottomOf="@+id/textView54"
app:layout_constraintStart_toEndOf="@+id/textView54" />
<EditText
android:id="@+id/editTextText48"
android:layout_width="125dp"
@ -223,7 +210,7 @@
android:layout_width="100dp"
android:layout_height="25dp"
android:gravity="center"
android:text="控制端口"
android:text="云台灵敏度"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/editTextText25"
@ -234,7 +221,7 @@
android:layout_width="100dp"
android:layout_height="25dp"
android:gravity="center"
android:text="右后"
android:text="右后"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/editTextText37"
@ -261,7 +248,7 @@
android:layout_width="100dp"
android:layout_height="25dp"
android:gravity="center"
android:text="后退"
android:text="后退"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/editTextText_left"
@ -288,7 +275,7 @@
android:layout_width="100dp"
android:layout_height="25dp"
android:gravity="center"
android:text="右转"
android:text="右转"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/editTextText_left"
@ -347,7 +334,7 @@
android:layout_width="100dp"
android:layout_height="25dp"
android:gravity="center"
android:text="右旋转"
android:text="右旋转"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/editTextText42"
@ -358,7 +345,7 @@
android:layout_width="100dp"
android:layout_height="25dp"
android:gravity="center"
android:text="右前"
android:text="右前"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/editTextText38"
@ -381,11 +368,12 @@
app:layout_constraintStart_toEndOf="@+id/textView41" />
<EditText
android:id="@+id/editTextText41"
android:id="@+id/controlIp"
android:layout_width="125dp"
android:layout_height="25dp"
android:layout_height="40dp"
android:clickable="true"
android:ems="10"
android:text="192.168.1.1"
android:includeFontPadding="false"
android:inputType="text"
android:paddingLeft="16dp"
@ -482,7 +470,7 @@
android:layout_height="25dp"
android:layout_marginStart="48dp"
android:gravity="center"
android:text="左后"
android:text="左后"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
@ -494,7 +482,7 @@
android:layout_height="25dp"
android:layout_marginStart="48dp"
android:gravity="center"
android:text="左旋转"
android:text="左旋转"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
@ -506,7 +494,7 @@
android:layout_height="25dp"
android:layout_marginStart="48dp"
android:gravity="center"
android:text="停止"
android:text="停止"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
@ -515,18 +503,18 @@
<TextView
android:id="@+id/textView55"
android:layout_width="100dp"
android:layout_height="25dp"
android:layout_height="40dp"
android:gravity="center"
android:text="云台灵敏度:"
android:text="控制端口"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/editTextText41"
app:layout_constraintStart_toEndOf="@+id/editTextText41" />
app:layout_constraintBottom_toBottomOf="@+id/controlIp"
app:layout_constraintStart_toEndOf="@+id/controlIp" />
<TextView
android:id="@+id/textView44"
android:layout_width="100dp"
android:layout_height="25dp"
android:layout_height="40dp"
android:layout_marginStart="48dp"
android:gravity="center"
android:text="控制地址"
@ -538,10 +526,10 @@
<TextView
android:id="@+id/textView53"
android:layout_width="100dp"
android:layout_height="25dp"
android:layout_height="40dp"
android:layout_marginStart="48dp"
android:gravity="center"
android:text="视频地址1"
android:text="视频地址"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
@ -553,7 +541,7 @@
android:layout_height="25dp"
android:layout_marginStart="48dp"
android:gravity="center"
android:text="左前"
android:text="左前"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
@ -565,20 +553,21 @@
android:layout_height="25dp"
android:layout_marginStart="48dp"
android:gravity="center"
android:text="左转"
android:text="左转"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView_forward" />
<TextView
android:id="@+id/textView_forward"
android:layout_width="100dp"
android:layout_height="25dp"
android:layout_marginStart="48dp"
android:layout_marginTop="52dp"
android:gravity="center"
android:text="前进:"
android:text="前进"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
@ -589,6 +578,8 @@
android:layout_width="80dp"
android:layout_height="40dp"
android:text="返回"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"

@ -7,73 +7,17 @@
android:orientation="vertical"
>
<EditText
android:id="@+id/editIP"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="http://192.168.1.1:8080/?action=stream"
app:layout_constraintBottom_toBottomOf="@+id/textViewIP"
app:layout_constraintStart_toEndOf="@id/textViewIP"
app:layout_constraintTop_toTopOf="@+id/textViewIP"
app:layout_constraintWidth_percent="0.6" />
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="50dp"
android:gravity="center"
android:text="控制地址"
app:layout_constraintStart_toStartOf="@+id/textViewIP"
app:layout_constraintTop_toBottomOf="@+id/textViewIP"
app:layout_constraintWidth_percent="0.15" />
<EditText
android:id="@+id/ip"
app:layout_constraintWidth_percent="0.6"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="192.168.1.1"
app:layout_constraintStart_toEndOf="@+id/textViewIP"
app:layout_constraintTop_toBottomOf="@+id/editIP" />
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:gravity="center"
android:text="控制端口"
app:layout_constraintStart_toStartOf="@+id/textViewIP"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintWidth_percent="0.15" />
<EditText
android:id="@+id/port"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="2001"
app:layout_constraintStart_toStartOf="@+id/editIP"
app:layout_constraintTop_toBottomOf="@+id/ip"
app:layout_constraintWidth_percent="0.6" />
<TextView
android:id="@+id/textViewIP"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginStart="90dp"
android:layout_marginTop="100dp"
android:gravity="center"
android:text="视频地址"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.15" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_marginBottom="40dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent">
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:id="@+id/button_go"

@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="fill_parent">
<!-- <wificar.RockerView-->
<!-- android:layout_width="100dp"-->
@ -11,54 +13,163 @@
<!-- android:layout_marginBottom="200dp"-->
<!-- android:visibility="visible"-->
<!-- tools:visibility="visible" />-->
<wificar.MySurfaceView
android:id="@+id/mySurfaceViewVideo"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/floatingView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageButton
android:id="@+id/TakePhoto"
android:layout_marginTop="5dp"
android:layout_width="66dp"
android:layout_height="55dp"
android:scaleType="centerCrop"
android:layout_marginStart="20dp"
android:src="@drawable/snapshot" />
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
android:id="@+id/menuIcon"
android:layout_width="60dp"
android:layout_height="60dp"
android:text="菜单"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/mySurfaceViewVideo" />
<LinearLayout
android:id="@+id/droppedMenu"
android:layout_width="300dp"
android:layout_height="200dp"
android:layout_below="@+id/menuIcon"
android:layout_alignParentEnd="true"
android:animateLayoutChanges="true"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo"
android:gravity="right"
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
android:id="@+id/linearLayout4"
android:layout_width="wrap_content"
android:layout_height="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:textSize="18dp"
android:text="舵机控制" />
<SeekBar
android:id="@+id/xSeekbar"
android:progress="50"
android:layout_width="300dp"
android:layout_height="30dp" />
</LinearLayout>
<ImageButton
android:id="@+id/ViewPhoto"
android:layout_width="66dp"
android:layout_height="55dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/TakePhoto"
android:layout_x="90dp"
android:layout_marginStart="20dp"
android:scaleType="centerCrop"
android:src="@drawable/look" />
<!-- <ImageView-->
<!-- android:id="@+id/floatingView"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- app:layout_constraintTop_toTopOf="parent" />-->
<LinearLayout
android:id="@+id/poseCheckLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:gravity="right"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
>
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_marginRight="10dp"
android:text="关节特征识别 启用"
android:textSize="18dp"
android:text="关节特征识别"
android:textColor="@android:color/white"
android:textSize="18dp"
android:textStyle="bold" />
<ImageView
@ -66,33 +177,83 @@
android:layout_height="25dp"
android:scaleType="centerCrop"
android:src="@drawable/circle" />
</LinearLayout>
<!-- <ImageView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentStart="true"-->
<!-- android:layout_alignParentTop="true"-->
<!-- android:layout_marginStart="40dp"-->
<!-- android:layout_marginLeft="40dp"-->
<!-- android:layout_marginTop="260dp"-->
<!-- android:src="@drawable/rocket_circle1" />-->
<!-- <ImageView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentStart="true"-->
<!-- android:layout_alignParentTop="true"-->
<!-- android:layout_marginStart="65dp"-->
<!-- android:layout_marginLeft="65dp"-->
<!-- android:layout_marginTop="285dp"-->
<!-- android:src="@drawable/rocket_circle2" />-->
<LinearLayout
android:id="@+id/lifeCheckLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/poseCheckLayout"
android:layout_alignEnd="@+id/poseCheckLayout"
app:layout_constraintBottom_toTopOf="@+id/poseCheckLayout"
app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo">
<!-- <wificar.RockerView-->
<!-- android:id="@+id/rockerView"-->
<!-- android:layout_width="265dp"-->
<!-- android:layout_height="300dp"-->
<!-- android:layout_alignParentStart="true"-->
<!-- android:layout_alignParentTop="true"-->
<!-- android:layout_marginStart="5dp"-->
<!-- android:layout_marginTop="167dp" />-->
</RelativeLayout>
<TextView
android:id="@+id/showLive"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_marginRight="10dp"
android:text="未检测到生命体"
android:textColor="@android:color/white"
android:textSize="18dp"
android:textStyle="bold" />
<ImageView
android:id="@+id/greenCircle"
android:layout_width="25dp"
android:layout_height="25dp"
android:scaleType="centerCrop"
android:src="@drawable/circle"
android:visibility="gone" />
<ImageView
android:id="@+id/redCircle"
android:layout_width="25dp"
android:layout_height="25dp"
android:scaleType="centerCrop"
android:src="@drawable/red_circle"
android:visibility="visible" />
</LinearLayout>
<LinearLayout
android:id="@+id/distanceLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/lifeCheckLayout"
android:layout_alignEnd="@+id/lifeCheckLayout"
android:gravity="right"
app:layout_constraintBottom_toTopOf="@+id/lifeCheckLayout"
app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:text="超声波距离"
android:textColor="@android:color/white"
android:textSize="18dp"
android:textStyle="bold" />
<TextView
android:id="@+id/distance"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:scaleType="centerCrop"
android:text="0"
android:textColor="#FFFFFF"
android:textSize="20dp" />
</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>
Loading…
Cancel
Save