1、六分裂导线识别

2、截图功能
3、增加无人机悬停天线日志
This commit is contained in:
hayu 2025-04-27 16:14:36 +08:00
parent 50144a2290
commit 44fc5cdcda
6 changed files with 364 additions and 58 deletions

View File

@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bonus.wrjtest">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"

View File

@ -1,11 +1,14 @@
package com.bonus.wrjtest
import ScreenshotHelper
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
import android.app.ProgressDialog
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.os.*
import android.util.Log
import android.view.View
import android.view.ViewGroup
@ -35,8 +38,11 @@ import org.w3c.dom.Text
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.text.SimpleDateFormat
import java.time.LocalTime
import java.time.format.DateTimeFormatter
import java.util.*
import kotlin.collections.ArrayList
class MainActivity : AppCompatActivity() {
@ -48,6 +54,8 @@ class MainActivity : AppCompatActivity() {
lateinit var radar2: TextView
lateinit var radar3: TextView
lateinit var radar4: TextView
lateinit var radar5: TextView
lateinit var radar6: TextView
lateinit var gps: TextView
lateinit var gpsMode: TextView
lateinit var pitchAngle: TextView
@ -147,6 +155,8 @@ class MainActivity : AppCompatActivity() {
*/
private var isRecord = 0;
private lateinit var screenshotHelper: ScreenshotHelper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.test)
@ -154,8 +164,10 @@ class MainActivity : AppCompatActivity() {
val myApplication = application as MyApplication
// 在 Activity 或其他有 Context 的地方
logger = KotlinLogger.getInstance(this)
screenshotHelper = ScreenshotHelper(this)
measureDataDao = MeasureDataDao(myApplication.getDbHelper())
measurementDataDao = MeasurementDataDao(myApplication.getDbHelper())
initPermission()
//初始化视图
initView()
//创建通道
@ -169,6 +181,15 @@ class MainActivity : AppCompatActivity() {
}
private fun initPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)
return
}
}
}
/**
* 初始化点击事件
*/
@ -309,6 +330,8 @@ class MainActivity : AppCompatActivity() {
radar2 = findViewById(R.id.radar2)
radar3 = findViewById(R.id.radar3)
radar4 = findViewById(R.id.radar4)
radar5 = findViewById(R.id.radar5)
radar6 = findViewById(R.id.radar6)
gps = findViewById(R.id.gps)
gpsMode = findViewById(R.id.gpsMode)
pitchAngle = findViewById(R.id.pitchAngle)
@ -459,20 +482,53 @@ class MainActivity : AppCompatActivity() {
}
// 记录无人机悬停数据
R.id.record -> {
if (isRecord==0){
isRecord=1;
record.setText("停止")
} else{
isRecord=0;
record.setText("记录")
}
sendMsg(5)
screenshotHelper.startScreenCapture()
// if (isRecord==0){
// isRecord=1;
// record.setText("停止")
// } else{
// isRecord=0;
// record.setText("记录")
// }
// sendMsg(5)
}
}
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
screenshotHelper.onActivityResult(requestCode, resultCode, data)
}
fun takeScreenshot(activity: Activity) {
val rootView = activity.window.decorView.rootView
rootView.isDrawingCacheEnabled = true
val bitmap = Bitmap.createBitmap(rootView.drawingCache)
rootView.isDrawingCacheEnabled = false
// Save bitmap to file
val fileName = "screenshot_" + SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) + ".png"
val storageDir = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "YourAppName")
if (!storageDir.exists()) {
storageDir.mkdirs()
}
val imageFile = File(storageDir, fileName)
var fos: FileOutputStream? = null
try {
fos = FileOutputStream(imageFile)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)
fos.flush()
} catch (e: Exception) {
e.printStackTrace()
} finally {
fos?.close()
}
}
/**
* 定义一个方法用于等待横滚角满足条件
*/
@ -528,9 +584,9 @@ class MainActivity : AppCompatActivity() {
measurementDataBean.radarLatitude=sensorDataBean.lat
measurementDataBean.radarElevation=sensorDataBean.h
// 将 coordinates 中的 lon, lat, h 拼接并赋值给 wire1Data, wire2Data, wire3Data, wire4Data
// 将 coordinates 中的 lon, lat, h 拼接并赋值给 wire1Data, wire2Data, wire3Data, wire4Data, wire5Data, wire6Data
// 最多处理前四个坐标
for (i in 0 until minOf(coordinates.size, 4)) {
for (i in 0 until minOf(coordinates.size, 6)) {
val coordinate = coordinates[i]
val dataString = "${coordinate.lon},${coordinate.lat},${coordinate.h}"
@ -539,6 +595,8 @@ class MainActivity : AppCompatActivity() {
1 -> measurementDataBean.wire2Data = dataString
2 -> measurementDataBean.wire3Data = dataString
3 -> measurementDataBean.wire4Data = dataString
4 -> measurementDataBean.wire5Data = dataString
5 -> measurementDataBean.wire6Data = dataString
}
}
measurementDataBean.time=DateTimeHelper.getNowDate()
@ -655,7 +713,7 @@ class MainActivity : AppCompatActivity() {
}
}
} else {
if (resultDataSb.length == 104) {
if (resultDataSb.length == 120) {
//因为有分包现象,判断头尾
if (resultDataSb.startsWith("F0F0F0") && resultDataSb.endsWith("CCDD")) {
returnData.setText("")
@ -673,34 +731,39 @@ class MainActivity : AppCompatActivity() {
val angle3 = data.substring(24, 28)
val distance4 = data.substring(28, 32)
val angle4 = data.substring(32, 36)
val pitchAngle1 = data.substring(36, 44)
val rollAngle1 = data.substring(44, 52)
val azimuthAngle1 = data.substring(52, 56)
val lon = data.substring(56, 66)
val lat = data.substring(66, 76)
val h = data.substring(76, 82)
val qual = data.substring(82, 84)
val distance5 = data.substring(36, 40)
val angle5 = data.substring(40, 44)
val distance6 = data.substring(44, 48)
val angle6 = data.substring(48, 52)
val splitType = data.substring(84, 86)
val pitchAngle1 = data.substring(52, 60)
val rollAngle1 = data.substring(60, 68)
val azimuthAngle1 = data.substring(68, 72)
val lon = data.substring(72, 82)
val lat = data.substring(82, 92)
val h = data.substring(92, 98)
val qual = data.substring(98, 100)
val splitType = data.substring(100, 102)
val splitNum = Integer.parseInt(splitType)
//水平角
val hAngleNum = data.substring(86, 90)
val hAngleNum = data.substring(102, 106)
//垂直角
val vAngleNum = data.substring(90, 94)
var radarDistance1: Double =
ByteUtil.hexToDecimalInt(distance1).toDouble() / 1000.0
val vAngleNum = data.substring(106, 110)
var radarDistance1: Double =ByteUtil.hexToDecimalInt(distance1).toDouble() / 1000.0
var radarAngle1: Double = ByteUtil.hexToDecimalInt(angle1).toDouble() / 100.0
var radarDistance2: Double =
ByteUtil.hexToDecimalInt(distance2).toDouble() / 1000.0
var radarDistance2: Double =ByteUtil.hexToDecimalInt(distance2).toDouble() / 1000.0
var radarAngle2: Double = ByteUtil.hexToDecimalInt(angle2).toDouble() / 100.0
var radarDistance3: Double =
ByteUtil.hexToDecimalInt(distance3).toDouble() / 1000.0
var radarDistance3: Double =ByteUtil.hexToDecimalInt(distance3).toDouble() / 1000.0
var radarAngle3: Double = ByteUtil.hexToDecimalInt(angle3).toDouble() / 100.0
var radarDistance4: Double =
ByteUtil.hexToDecimalInt(distance4).toDouble() / 1000.0
var radarDistance4: Double =ByteUtil.hexToDecimalInt(distance4).toDouble() / 1000.0
var radarAngle4: Double = ByteUtil.hexToDecimalInt(angle4).toDouble() / 100.0
var radarDistance5: Double =ByteUtil.hexToDecimalInt(distance5).toDouble() / 1000.0
var radarAngle5: Double = ByteUtil.hexToDecimalInt(angle5).toDouble() / 100.0
var radarDistance6: Double =ByteUtil.hexToDecimalInt(distance6).toDouble() / 1000.0
var radarAngle6: Double = ByteUtil.hexToDecimalInt(angle6).toDouble() / 100.0
//水平角
val hAngle = ByteUtil.hexToDecimalInt(hAngleNum).toDouble() / 100.0
//最大角度为22.5,减掉22.5,看到的是与最佳角度差距多少
@ -711,7 +774,9 @@ class MainActivity : AppCompatActivity() {
RadarPointBean(radarAngle1, radarDistance1),
RadarPointBean(radarAngle2, radarDistance2),
RadarPointBean(radarAngle3, radarDistance3),
RadarPointBean(radarAngle4, radarDistance4)
RadarPointBean(radarAngle4, radarDistance4),
RadarPointBean(radarAngle5, radarDistance5),
RadarPointBean(radarAngle6, radarDistance6)
)
// 解析俯仰角和横滚角
var pitchAngle2: Double = ByteUtil.hexToSignedDecimalInt(pitchAngle1).toDouble() / 100.0
@ -737,6 +802,8 @@ class MainActivity : AppCompatActivity() {
radar2.setText("${radarDistance2}m, ${radarAngle2-pitchAngle2}°")
radar3.setText("${radarDistance3}m, ${radarAngle3-pitchAngle2}°")
radar4.setText("${radarDistance4}m, ${radarAngle4-pitchAngle2}°")
radar5.setText("${radarDistance5}m, ${radarAngle5-pitchAngle2}°")
radar6.setText("${radarDistance6}m, ${radarAngle6-pitchAngle2}°")
hAngleText.setText("${hAngle}°")
vAngleText.setText("${vAngle}°")
@ -750,6 +817,8 @@ class MainActivity : AppCompatActivity() {
logger.log("2号线 "+radarDistance2+" , "+(radarAngle2-pitchAngle2)+"",isPrint);
logger.log("3号线 "+radarDistance3+" , "+(radarAngle3-pitchAngle2)+"",isPrint);
logger.log("4号线 "+radarDistance4+" , "+(radarAngle4-pitchAngle2)+"",isPrint);
logger.log("5号线 "+radarDistance5+" , "+(radarAngle5-pitchAngle2)+"",isPrint);
logger.log("6号线 "+radarDistance6+" , "+(radarAngle6-pitchAngle2)+"",isPrint);
logger.log("俯仰角: "+pitchAngle2+" ",isPrint);
logger.log("横滚角: "+rollAngle2+" ",isPrint);
logger.log("航向角: "+azimuthAngle2+" ",isPrint);
@ -776,7 +845,7 @@ class MainActivity : AppCompatActivity() {
sensorDataBean.h = h2
var calStandardDeviation: MutableList<RadarPointBean> = ArrayList()
// 检查 splitNum 是否在 1 到 4 的范围内
if (splitNum in 1..4) {
if (splitNum in 1..6) {
for (i in 0 until splitNum) {
calStandardDeviation.add(radarPoints[i])
}
@ -1162,6 +1231,21 @@ class MainActivity : AppCompatActivity() {
coordinate1.add(coordinate)
}
}
if (!StringHelper.isEmptyAndNull(data.wire5Data)) {
// 将 data.wire5Data 的数据用逗号分隔
val wire5DataList = data.wire5Data.split(",")
if (wire5DataList.size >= 3) {
val coordinate = Coordinate(wire5DataList[0].toDouble(), wire5DataList[1].toDouble(), wire5DataList[2].toDouble())
coordinate1.add(coordinate)
}
}
if (!StringHelper.isEmptyAndNull(data.wire6Data)) {
val wire6DataList = data.wire6Data.split(",")
if (wire6DataList.size >= 3) {
val coordinate = Coordinate(wire6DataList[0].toDouble(), wire6DataList[1].toDouble(), wire6DataList[2].toDouble())
coordinate1.add(coordinate)
}
}
coordinatesList.add(coordinate1)
}
@ -1219,7 +1303,7 @@ class MainActivity : AppCompatActivity() {
lineAllPoint.add(point4[i])
lineAllPoint.add(point5[i])
lineAllPoint.add(point6[i])
sb.append(calculate(span, lineAllPoint, pointNum)).append(",")
sb.append(calculate(span, lineAllPoint, pointNum)).append(" ");
}
return sb.toString()
// sagEditText.setText(sb.toString())
@ -1372,11 +1456,16 @@ class MainActivity : AppCompatActivity() {
Log.e(this::class.java.toString(), obj.toString())
}
/**
* 清空所有文本框输入框
*/
fun clearAllEditTexts() {
radar1.setText("")
radar2.setText("")
radar3.setText("")
radar4.setText("")
radar5.setText("")
radar6.setText("")
gps.setText("")
gpsMode.setText("")
pitchAngle.setText("")

View File

@ -37,6 +37,8 @@ public class MeasurementDataDao {
"`wire2Data` varchar(100)," +
"`wire3Data` varchar(100)," +
"`wire4Data` varchar(100)," +
"`wire5Data` varchar(100)," +
"`wire6Data` varchar(100)," +
"`sagValue` varchar(100)," +
"`time` varchar(100)" +
")";
@ -51,8 +53,8 @@ public class MeasurementDataDao {
String sql = "INSERT OR REPLACE INTO `bm_measurement_data` (" +
"`splitType`,`span`,`h`,`loopType`, `wirePosition`, `wirePositionName`, `rollAngle`, `pitchAngle`, `yawAngle`, " +
"`radarLongitude`, `radarLatitude`, `radarElevation`, `wire1Data`, `wire2Data`, `wire3Data`, " +
"`wire4Data`, `sagValue`, `time`) " +
"VALUES (?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
"`wire4Data`,`wire5Data`,`wire6Data`, `sagValue`, `time`) " +
"VALUES (?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
this.dbHelper.execSQL(sql, new Object[]{
measurementData.getSplitType(),
@ -71,6 +73,8 @@ public class MeasurementDataDao {
measurementData.getWire2Data(),
measurementData.getWire3Data(),
measurementData.getWire4Data(),
measurementData.getWire5Data(),
measurementData.getWire6Data(),
measurementData.getSagValue(),
measurementData.getTime()
});
@ -111,6 +115,8 @@ public class MeasurementDataDao {
data.setWire2Data(cr.getString(cr.getColumnIndex("wire2Data")));
data.setWire3Data(cr.getString(cr.getColumnIndex("wire3Data")));
data.setWire4Data(cr.getString(cr.getColumnIndex("wire4Data")));
data.setWire5Data(cr.getString(cr.getColumnIndex("wire5Data")));
data.setWire6Data(cr.getString(cr.getColumnIndex("wire6Data")));
data.setSagValue(cr.getString(cr.getColumnIndex("sagValue")));
data.setTime(cr.getString(cr.getColumnIndex("time")));
dataList.add(data);
@ -156,6 +162,8 @@ public class MeasurementDataDao {
data.setWire2Data(cr.getString(cr.getColumnIndex("wire2Data")));
data.setWire3Data(cr.getString(cr.getColumnIndex("wire3Data")));
data.setWire4Data(cr.getString(cr.getColumnIndex("wire4Data")));
data.setWire5Data(cr.getString(cr.getColumnIndex("wire5Data")));
data.setWire6Data(cr.getString(cr.getColumnIndex("wire6Data")));
data.setSagValue(cr.getString(cr.getColumnIndex("sagValue")));
data.setTime(cr.getString(cr.getColumnIndex("time")));
}
@ -226,6 +234,8 @@ public class MeasurementDataDao {
data.setWire2Data(cr.getString(cr.getColumnIndex("wire2Data")));
data.setWire3Data(cr.getString(cr.getColumnIndex("wire3Data")));
data.setWire4Data(cr.getString(cr.getColumnIndex("wire4Data")));
data.setWire5Data(cr.getString(cr.getColumnIndex("wire5Data")));
data.setWire6Data(cr.getString(cr.getColumnIndex("wire6Data")));
data.setSagValue(cr.getString(cr.getColumnIndex("sagValue")));
data.setTime(cr.getString(cr.getColumnIndex("time")));
// 根据实际字段补充其他 setter 方法

View File

@ -87,6 +87,14 @@ public class MeasurementDataBean {
* 4号线经纬度高程
*/
private String wire4Data;
/**
* 5号线经纬度高程
*/
private String wire5Data;
/**
* 6号线经纬度高程
*/
private String wire6Data;
/**
@ -260,4 +268,20 @@ public class MeasurementDataBean {
public void setH(double h) {
this.h = h;
}
public String getWire5Data() {
return wire5Data;
}
public void setWire5Data(String wire5Data) {
this.wire5Data = wire5Data;
}
public String getWire6Data() {
return wire6Data;
}
public void setWire6Data(String wire6Data) {
this.wire6Data = wire6Data;
}
}

View File

@ -0,0 +1,120 @@
import android.app.Activity
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.PixelFormat
import android.hardware.display.DisplayManager
import android.media.Image
import android.media.ImageReader
import android.media.projection.MediaProjection
import android.media.projection.MediaProjectionManager
import android.os.Build
import android.os.Bundle
import android.util.DisplayMetrics
import android.util.Log
import androidx.annotation.RequiresApi
import java.io.File
import java.io.FileOutputStream
import java.nio.ByteBuffer
class ScreenshotHelper(private val activity: Activity) {
private var mediaProjectionManager: MediaProjectionManager? = null
private var mediaProjection: MediaProjection? = null
private var imageReader: ImageReader? = null
private var displayMetrics: DisplayMetrics? = null
companion object {
const val REQUEST_CODE_SCREEN_CAPTURE = 1001
}
fun startScreenCapture() {
mediaProjectionManager =
activity.getSystemService(Activity.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
val permissionIntent = mediaProjectionManager?.createScreenCaptureIntent()
activity.startActivityForResult(permissionIntent, REQUEST_CODE_SCREEN_CAPTURE)
}
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_CODE_SCREEN_CAPTURE && resultCode == Activity.RESULT_OK) {
mediaProjection = mediaProjectionManager?.getMediaProjection(resultCode, data!!)
captureScreenOnce()
}
}
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
private fun captureScreenOnce() {
displayMetrics = DisplayMetrics()
activity.windowManager.defaultDisplay.getRealMetrics(displayMetrics)
val width = displayMetrics!!.widthPixels
val height = displayMetrics!!.heightPixels
imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2)
mediaProjection?.createVirtualDisplay(
"ScreenCapture",
width,
height,
displayMetrics!!.densityDpi,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
imageReader?.surface,
null,
null
)
imageReader?.setOnImageAvailableListener({ reader ->
val image = reader.acquireLatestImage()
val bitmap = imageToBitmap(image)
image?.close()
saveBitmapToFile(bitmap)
// 停止捕获并释放资源
stopScreenCapture()
}, null)
}
private fun imageToBitmap(image: Image?): Bitmap {
val planes = image?.planes
val buffer: ByteBuffer = planes!![0].buffer
val pixelStride = planes[0].pixelStride
val rowStride = planes[0].rowStride
val rowPadding = rowStride - pixelStride * image.width
val bitmap = Bitmap.createBitmap(
image.width + rowPadding / pixelStride,
image.height,
Bitmap.Config.ARGB_8888
)
bitmap.copyPixelsFromBuffer(buffer)
return bitmap
}
private fun saveBitmapToFile(bitmap: Bitmap) {
val fileName = "screenshot_${System.currentTimeMillis()}.png"
val storageDir = File(activity.getExternalFilesDir(null), "Screenshots")
if (!storageDir.exists()) {
storageDir.mkdirs()
}
val file = File(storageDir, fileName)
try {
val fos = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)
fos.flush()
fos.close()
Log.d("Screenshot", "Screenshot saved to ${file.absolutePath}")
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun stopScreenCapture() {
mediaProjection?.stop()
imageReader?.setOnImageAvailableListener(null, null)
imageReader?.close()
mediaProjection = null
imageReader = null
Log.d("Screenshot", "Screen capture stopped")
}
}

View File

@ -139,6 +139,66 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:layout_width="55dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="5号线:"
android:textColor="#333333"
android:textSize="11sp" />
<TextView
android:id="@+id/radar5"
android:layout_width="0dp"
android:layout_height="29dp"
android:layout_weight="1"
android:background="@drawable/edittext_bg"
android:inputType="text"
android:padding="6dp"
android:textColor="#333333"
android:textSize="11sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:layout_width="55dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="6号线:"
android:textColor="#333333"
android:textSize="11sp" />
<TextView
android:id="@+id/radar6"
android:layout_width="0dp"
android:layout_height="29dp"
android:layout_weight="1"
android:background="@drawable/edittext_bg"
android:inputType="text"
android:padding="6dp"
android:textColor="#333333"
android:textSize="11sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -791,9 +851,9 @@
android:layout_height="40dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_weight="0.85"
android:layout_weight="1"
android:text="保存配置"
android:textSize="9sp" />
android:textSize="10sp" />
<Button
android:id="@+id/send2"
@ -801,9 +861,9 @@
android:layout_height="40dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_weight="0.85"
android:layout_weight="1"
android:text="开始测量"
android:textSize="9sp" />
android:textSize="10sp" />
<Button
android:id="@+id/poll"
@ -811,9 +871,20 @@
android:layout_height="40dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_weight="0.85"
android:layout_weight="1"
android:text="保存数据"
android:textSize="9sp" />
android:textSize="10sp" />
<Button
android:id="@+id/measureDistance"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_weight="1"
android:text="测量距离"
android:textSize="10sp" />
<Button
android:id="@+id/measure"
@ -821,9 +892,9 @@
android:layout_height="40dp"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_weight="0.85"
android:layout_weight="1"
android:text="计算弧垂"
android:textSize="9sp" />
android:textSize="10sp" />
<Button
android:id="@+id/clear"
@ -831,9 +902,9 @@
android:layout_height="40dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_weight="0.85"
android:layout_weight="1"
android:text="清空数据"
android:textSize="9sp" />
android:textSize="10sp" />
<Button
android:id="@+id/video"
@ -845,16 +916,6 @@
android:text="视频"
android:textSize="9sp" />
<Button
android:id="@+id/measureDistance"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_weight="0.65"
android:text="测距"
android:textSize="9sp" />
<Button
android:id="@+id/record"
android:layout_width="0dp"