diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt index d0b247b..3c1cfe2 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt @@ -1,22 +1,23 @@ package com.casic.br.operationsite.extensions -import com.pengxh.kt.lite.widget.SteeringWheelController +import com.casic.br.operationsite.widgets.SteeringWheelView -fun SteeringWheelController.Direction.createStartCommand(): ByteArray { + +fun SteeringWheelView.Direction.createStartCommand(): ByteArray { when (this) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x04.toByte(), 0xFF.toByte(), 0x00, 0x04.toByte() ) } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { //Byte 6 (Data 2) - 竖直速度, 值从 00 (停止) 到 3F return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x08.toByte(), 0x00, 0xFF.toByte(), 0x08.toByte() ) } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x02.toByte(), 0xFF.toByte(), 0x00, 0x02.toByte() diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt index d0b247b..3c1cfe2 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt @@ -1,22 +1,23 @@ package com.casic.br.operationsite.extensions -import com.pengxh.kt.lite.widget.SteeringWheelController +import com.casic.br.operationsite.widgets.SteeringWheelView -fun SteeringWheelController.Direction.createStartCommand(): ByteArray { + +fun SteeringWheelView.Direction.createStartCommand(): ByteArray { when (this) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x04.toByte(), 0xFF.toByte(), 0x00, 0x04.toByte() ) } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { //Byte 6 (Data 2) - 竖直速度, 值从 00 (停止) 到 3F return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x08.toByte(), 0x00, 0xFF.toByte(), 0x08.toByte() ) } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x02.toByte(), 0xFF.toByte(), 0x00, 0x02.toByte() diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 13cb09f..1b22adb 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -134,7 +134,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -146,7 +146,7 @@ * 声光报警开关状态 */ suspend fun getAlarmState(): String { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -256,7 +256,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt index d0b247b..3c1cfe2 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt @@ -1,22 +1,23 @@ package com.casic.br.operationsite.extensions -import com.pengxh.kt.lite.widget.SteeringWheelController +import com.casic.br.operationsite.widgets.SteeringWheelView -fun SteeringWheelController.Direction.createStartCommand(): ByteArray { + +fun SteeringWheelView.Direction.createStartCommand(): ByteArray { when (this) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x04.toByte(), 0xFF.toByte(), 0x00, 0x04.toByte() ) } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { //Byte 6 (Data 2) - 竖直速度, 值从 00 (停止) 到 3F return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x08.toByte(), 0x00, 0xFF.toByte(), 0x08.toByte() ) } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x02.toByte(), 0xFF.toByte(), 0x00, 0x02.toByte() diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 13cb09f..1b22adb 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -134,7 +134,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -146,7 +146,7 @@ * 声光报警开关状态 */ suspend fun getAlarmState(): String { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -256,7 +256,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index f50c0f7..ace8e16 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -34,5 +34,6 @@ const val WIFI_PASSWORD = "zhsz20311hw" const val UDP_HOST = "udpServer" const val UDP_PORT = 9000 + const val TCP_HOST = "tcpServer" const val TCP_PORT = 9000 } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt index d0b247b..3c1cfe2 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt @@ -1,22 +1,23 @@ package com.casic.br.operationsite.extensions -import com.pengxh.kt.lite.widget.SteeringWheelController +import com.casic.br.operationsite.widgets.SteeringWheelView -fun SteeringWheelController.Direction.createStartCommand(): ByteArray { + +fun SteeringWheelView.Direction.createStartCommand(): ByteArray { when (this) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x04.toByte(), 0xFF.toByte(), 0x00, 0x04.toByte() ) } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { //Byte 6 (Data 2) - 竖直速度, 值从 00 (停止) 到 3F return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x08.toByte(), 0x00, 0xFF.toByte(), 0x08.toByte() ) } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x02.toByte(), 0xFF.toByte(), 0x00, 0x02.toByte() diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 13cb09f..1b22adb 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -134,7 +134,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -146,7 +146,7 @@ * 声光报警开关状态 */ suspend fun getAlarmState(): String { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -256,7 +256,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index f50c0f7..ace8e16 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -34,5 +34,6 @@ const val WIFI_PASSWORD = "zhsz20311hw" const val UDP_HOST = "udpServer" const val UDP_PORT = 9000 + const val TCP_HOST = "tcpServer" const val TCP_PORT = 9000 } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt index 2ee2c03..39675f1 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt @@ -23,6 +23,7 @@ import com.casic.br.operationsite.utils.hk.MessageCodeHub import com.casic.br.operationsite.utils.hk.SDKGuider import com.casic.br.operationsite.vm.RegionViewModel +import com.casic.br.operationsite.widgets.SteeringWheelView import com.gyf.immersionbar.ImmersionBar import com.hikvision.netsdk.HCNetSDK import com.hikvision.netsdk.NET_DVR_PREVIEWINFO @@ -31,7 +32,6 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.widget.SteeringWheelController import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_hikvision.* import kotlinx.android.synthetic.main.include_option_title.* @@ -148,22 +148,22 @@ } wheelController.setOnWheelTouchListener(object : - SteeringWheelController.OnWheelTouchListener { - override fun onActionTurnUp(dir: SteeringWheelController.Direction) { + SteeringWheelView.OnWheelTouchListener { + override fun onActionTurnUp(dir: SteeringWheelView.Direction) { when (dir) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_LEFT, 1) isActionUp = true } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.TILT_UP, 1) isActionUp = true } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_RIGHT, 1) isActionUp = true } - SteeringWheelController.Direction.BOTTOM -> { + SteeringWheelView.Direction.BOTTOM -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.TILT_DOWN, 1) isActionUp = true } diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt index d0b247b..3c1cfe2 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt @@ -1,22 +1,23 @@ package com.casic.br.operationsite.extensions -import com.pengxh.kt.lite.widget.SteeringWheelController +import com.casic.br.operationsite.widgets.SteeringWheelView -fun SteeringWheelController.Direction.createStartCommand(): ByteArray { + +fun SteeringWheelView.Direction.createStartCommand(): ByteArray { when (this) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x04.toByte(), 0xFF.toByte(), 0x00, 0x04.toByte() ) } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { //Byte 6 (Data 2) - 竖直速度, 值从 00 (停止) 到 3F return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x08.toByte(), 0x00, 0xFF.toByte(), 0x08.toByte() ) } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x02.toByte(), 0xFF.toByte(), 0x00, 0x02.toByte() diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 13cb09f..1b22adb 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -134,7 +134,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -146,7 +146,7 @@ * 声光报警开关状态 */ suspend fun getAlarmState(): String { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -256,7 +256,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index f50c0f7..ace8e16 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -34,5 +34,6 @@ const val WIFI_PASSWORD = "zhsz20311hw" const val UDP_HOST = "udpServer" const val UDP_PORT = 9000 + const val TCP_HOST = "tcpServer" const val TCP_PORT = 9000 } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt index 2ee2c03..39675f1 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt @@ -23,6 +23,7 @@ import com.casic.br.operationsite.utils.hk.MessageCodeHub import com.casic.br.operationsite.utils.hk.SDKGuider import com.casic.br.operationsite.vm.RegionViewModel +import com.casic.br.operationsite.widgets.SteeringWheelView import com.gyf.immersionbar.ImmersionBar import com.hikvision.netsdk.HCNetSDK import com.hikvision.netsdk.NET_DVR_PREVIEWINFO @@ -31,7 +32,6 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.widget.SteeringWheelController import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_hikvision.* import kotlinx.android.synthetic.main.include_option_title.* @@ -148,22 +148,22 @@ } wheelController.setOnWheelTouchListener(object : - SteeringWheelController.OnWheelTouchListener { - override fun onActionTurnUp(dir: SteeringWheelController.Direction) { + SteeringWheelView.OnWheelTouchListener { + override fun onActionTurnUp(dir: SteeringWheelView.Direction) { when (dir) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_LEFT, 1) isActionUp = true } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.TILT_UP, 1) isActionUp = true } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_RIGHT, 1) isActionUp = true } - SteeringWheelController.Direction.BOTTOM -> { + SteeringWheelView.Direction.BOTTOM -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.TILT_DOWN, 1) isActionUp = true } diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 26c0f8d..95b6fcb 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -19,6 +19,7 @@ import com.casic.br.operationsite.utils.netty.tcp.SocketManager import com.casic.br.operationsite.vm.AlarmViewModel import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.widgets.SteeringWheelView import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -26,12 +27,9 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.SteeringWheelController -import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_methane.* -import kotlinx.android.synthetic.main.include_option_title.* - +import kotlinx.android.synthetic.main.include_base_title.* class MethaneActivity : KotlinBaseActivity(), Handler.Callback { @@ -97,36 +95,36 @@ override fun handleMessage(msg: Message): Boolean { if (msg.what == 2023072101) { tcpStateView.setBackgroundColor(R.color.greenColor.convertColor(this)) - rightOptionView.text = "已连接" + connectButton.isEnabled = false + addressView.isEnabled = false } else if (msg.what == 2023072102) { tcpStateView.setBackgroundColor(R.color.redTextColor.convertColor(this)) - rightOptionView.text = "已断开" + connectButton.isEnabled = true + addressView.isEnabled = true } return true } + override fun onResume() { + super.onResume() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.139").toString() + addressView.setText(host) + } + override fun initEvent() { leftBackView.setOnClickListener { finish() } //连接TCP - rightOptionView.setOnClickListener { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.139").toString() - AlertInputDialog.Builder() - .setContext(this) - .setTitle("请输入一体机IP地址") - .setHintMessage(host) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertInputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - SaveKeyValues.putValue(LocaleConstant.UDP_HOST, value) + connectButton.setOnClickListener { + if (addressView.text.isNullOrBlank()) { + "请输入正确的指令地址".show(this) + return@setOnClickListener + } + val value = addressView.text.toString() - SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT) - } + SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value) - override fun onCancelClick() {} - }).build().show() + SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT) } val bottomActionSheet = BottomActionSheet.Builder() @@ -190,12 +188,12 @@ } wheelController.setOnWheelTouchListener(object : - SteeringWheelController.OnWheelTouchListener { - override fun onActionTurnUp(dir: SteeringWheelController.Direction) { - if (dir == SteeringWheelController.Direction.LEFT || - dir == SteeringWheelController.Direction.TOP || - dir == SteeringWheelController.Direction.RIGHT || - dir == SteeringWheelController.Direction.BOTTOM + SteeringWheelView.OnWheelTouchListener { + override fun onActionTurnUp(dir: SteeringWheelView.Direction) { + if (dir == SteeringWheelView.Direction.LEFT || + dir == SteeringWheelView.Direction.TOP || + dir == SteeringWheelView.Direction.RIGHT || + dir == SteeringWheelView.Direction.BOTTOM ) { SocketManager.get.send(createStopCommand()) isActionUp = true @@ -215,28 +213,28 @@ override fun onLeftTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.LEFT.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.LEFT.createStartCommand()) isActionUp = false } } override fun onTopTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.TOP.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.TOP.createStartCommand()) isActionUp = false } } override fun onRightTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.RIGHT.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.RIGHT.createStartCommand()) isActionUp = false } } override fun onBottomTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.BOTTOM.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.BOTTOM.createStartCommand()) isActionUp = false } } diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt index d0b247b..3c1cfe2 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt @@ -1,22 +1,23 @@ package com.casic.br.operationsite.extensions -import com.pengxh.kt.lite.widget.SteeringWheelController +import com.casic.br.operationsite.widgets.SteeringWheelView -fun SteeringWheelController.Direction.createStartCommand(): ByteArray { + +fun SteeringWheelView.Direction.createStartCommand(): ByteArray { when (this) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x04.toByte(), 0xFF.toByte(), 0x00, 0x04.toByte() ) } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { //Byte 6 (Data 2) - 竖直速度, 值从 00 (停止) 到 3F return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x08.toByte(), 0x00, 0xFF.toByte(), 0x08.toByte() ) } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x02.toByte(), 0xFF.toByte(), 0x00, 0x02.toByte() diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 13cb09f..1b22adb 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -134,7 +134,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -146,7 +146,7 @@ * 声光报警开关状态 */ suspend fun getAlarmState(): String { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -256,7 +256,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index f50c0f7..ace8e16 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -34,5 +34,6 @@ const val WIFI_PASSWORD = "zhsz20311hw" const val UDP_HOST = "udpServer" const val UDP_PORT = 9000 + const val TCP_HOST = "tcpServer" const val TCP_PORT = 9000 } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt index 2ee2c03..39675f1 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt @@ -23,6 +23,7 @@ import com.casic.br.operationsite.utils.hk.MessageCodeHub import com.casic.br.operationsite.utils.hk.SDKGuider import com.casic.br.operationsite.vm.RegionViewModel +import com.casic.br.operationsite.widgets.SteeringWheelView import com.gyf.immersionbar.ImmersionBar import com.hikvision.netsdk.HCNetSDK import com.hikvision.netsdk.NET_DVR_PREVIEWINFO @@ -31,7 +32,6 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.widget.SteeringWheelController import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_hikvision.* import kotlinx.android.synthetic.main.include_option_title.* @@ -148,22 +148,22 @@ } wheelController.setOnWheelTouchListener(object : - SteeringWheelController.OnWheelTouchListener { - override fun onActionTurnUp(dir: SteeringWheelController.Direction) { + SteeringWheelView.OnWheelTouchListener { + override fun onActionTurnUp(dir: SteeringWheelView.Direction) { when (dir) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_LEFT, 1) isActionUp = true } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.TILT_UP, 1) isActionUp = true } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_RIGHT, 1) isActionUp = true } - SteeringWheelController.Direction.BOTTOM -> { + SteeringWheelView.Direction.BOTTOM -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.TILT_DOWN, 1) isActionUp = true } diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 26c0f8d..95b6fcb 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -19,6 +19,7 @@ import com.casic.br.operationsite.utils.netty.tcp.SocketManager import com.casic.br.operationsite.vm.AlarmViewModel import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.widgets.SteeringWheelView import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -26,12 +27,9 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.SteeringWheelController -import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_methane.* -import kotlinx.android.synthetic.main.include_option_title.* - +import kotlinx.android.synthetic.main.include_base_title.* class MethaneActivity : KotlinBaseActivity(), Handler.Callback { @@ -97,36 +95,36 @@ override fun handleMessage(msg: Message): Boolean { if (msg.what == 2023072101) { tcpStateView.setBackgroundColor(R.color.greenColor.convertColor(this)) - rightOptionView.text = "已连接" + connectButton.isEnabled = false + addressView.isEnabled = false } else if (msg.what == 2023072102) { tcpStateView.setBackgroundColor(R.color.redTextColor.convertColor(this)) - rightOptionView.text = "已断开" + connectButton.isEnabled = true + addressView.isEnabled = true } return true } + override fun onResume() { + super.onResume() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.139").toString() + addressView.setText(host) + } + override fun initEvent() { leftBackView.setOnClickListener { finish() } //连接TCP - rightOptionView.setOnClickListener { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.139").toString() - AlertInputDialog.Builder() - .setContext(this) - .setTitle("请输入一体机IP地址") - .setHintMessage(host) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertInputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - SaveKeyValues.putValue(LocaleConstant.UDP_HOST, value) + connectButton.setOnClickListener { + if (addressView.text.isNullOrBlank()) { + "请输入正确的指令地址".show(this) + return@setOnClickListener + } + val value = addressView.text.toString() - SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT) - } + SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value) - override fun onCancelClick() {} - }).build().show() + SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT) } val bottomActionSheet = BottomActionSheet.Builder() @@ -190,12 +188,12 @@ } wheelController.setOnWheelTouchListener(object : - SteeringWheelController.OnWheelTouchListener { - override fun onActionTurnUp(dir: SteeringWheelController.Direction) { - if (dir == SteeringWheelController.Direction.LEFT || - dir == SteeringWheelController.Direction.TOP || - dir == SteeringWheelController.Direction.RIGHT || - dir == SteeringWheelController.Direction.BOTTOM + SteeringWheelView.OnWheelTouchListener { + override fun onActionTurnUp(dir: SteeringWheelView.Direction) { + if (dir == SteeringWheelView.Direction.LEFT || + dir == SteeringWheelView.Direction.TOP || + dir == SteeringWheelView.Direction.RIGHT || + dir == SteeringWheelView.Direction.BOTTOM ) { SocketManager.get.send(createStopCommand()) isActionUp = true @@ -215,28 +213,28 @@ override fun onLeftTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.LEFT.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.LEFT.createStartCommand()) isActionUp = false } } override fun onTopTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.TOP.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.TOP.createStartCommand()) isActionUp = false } } override fun onRightTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.RIGHT.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.RIGHT.createStartCommand()) isActionUp = false } } override fun onBottomTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.BOTTOM.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.BOTTOM.createStartCommand()) isActionUp = false } } diff --git a/app/src/main/java/com/casic/br/operationsite/widgets/SteeringWheelView.kt b/app/src/main/java/com/casic/br/operationsite/widgets/SteeringWheelView.kt new file mode 100644 index 0000000..ec48642 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/widgets/SteeringWheelView.kt @@ -0,0 +1,386 @@ +package com.casic.br.operationsite.widgets + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.util.AttributeSet +import android.view.MotionEvent +import android.view.View +import com.casic.br.operationsite.R +import kotlin.math.abs +import kotlin.math.pow +import kotlin.math.sin +import kotlin.math.sqrt + +class SteeringWheelView constructor(context: Context, attrs: AttributeSet) : + View(context, attrs), View.OnTouchListener { + private val kTag = "SteeringWheelView" + + //画布中心x + private var canvasCenterX = 0f + + //画布中心y + private var canvasCenterY = 0f + + //控件直径 + private val diameter: Float + + //四个方位小点直径 + private val directionDiameter: Float + + //内部圆半径 + private var innerCircleRadius: Float = 0.0f + + //外圆区域 + private lateinit var outerCircleRectF: RectF + + //内部开关区域 + private lateinit var centerSwitchRectF: RectF + + //线条粗细 + private val borderStroke: Float + + //Paint + private val backgroundPaint: Paint + private val borderPaint: Paint + private val centerPaint: Paint + private val leftDirectionPaint: Paint + private val topDirectionPaint: Paint + private val rightDirectionPaint: Paint + private val bottomDirectionPaint: Paint + private val switchPaint: Paint + + //Color + private val directionColor: Int + private val switchColor: Int + + // 各控件使用状态 + private var leftTurn = false + private var topTurn = false + private var rightTurn = false + private var bottomTurn = false + private var centerTurn = false + + init { + val type = context.obtainStyledAttributes(attrs, R.styleable.SteeringWheelView) + diameter = type.getDimension( + R.styleable.SteeringWheelView_ctrl_diameter, 200f + ) + val borderColor = type.getColor( + R.styleable.SteeringWheelView_ctrl_borderColor, Color.CYAN + ) + val backgroundColor = type.getColor( + R.styleable.SteeringWheelView_ctrl_backgroundColor, Color.WHITE + ) + borderStroke = type.getDimension( + R.styleable.SteeringWheelView_ctrl_borderStroke, 5f + ) + switchColor = type.getColor( + R.styleable.SteeringWheelView_ctrl_switchColor, Color.WHITE + ) + directionColor = type.getColor( + R.styleable.SteeringWheelView_ctrl_directionColor, Color.BLUE + ) + directionDiameter = type.getDimension( + R.styleable.SteeringWheelView_ctrl_directionDiameter, 15f + ) + type.recycle() + + borderPaint = Paint() + borderPaint.isAntiAlias = true + borderPaint.isDither = true + borderPaint.style = Paint.Style.STROKE + borderPaint.strokeWidth = borderStroke + borderPaint.color = borderColor + + backgroundPaint = Paint() + backgroundPaint.isAntiAlias = true + backgroundPaint.isDither = true + backgroundPaint.style = Paint.Style.FILL + backgroundPaint.color = backgroundColor + + centerPaint = Paint() + centerPaint.isAntiAlias = true + centerPaint.isDither = true + centerPaint.style = Paint.Style.FILL + centerPaint.color = borderColor + + switchPaint = Paint() + switchPaint.isAntiAlias = true + switchPaint.isDither = true + switchPaint.style = Paint.Style.STROKE + switchPaint.strokeWidth = borderStroke + switchPaint.strokeCap = Paint.Cap.ROUND + switchPaint.color = switchColor + + leftDirectionPaint = Paint() + leftDirectionPaint.isAntiAlias = true + leftDirectionPaint.isDither = true + leftDirectionPaint.style = Paint.Style.FILL + leftDirectionPaint.color = directionColor + + topDirectionPaint = Paint() + topDirectionPaint.isAntiAlias = true + topDirectionPaint.isDither = true + topDirectionPaint.style = Paint.Style.FILL + topDirectionPaint.color = directionColor + + rightDirectionPaint = Paint() + rightDirectionPaint.isAntiAlias = true + rightDirectionPaint.isDither = true + rightDirectionPaint.style = Paint.Style.FILL + rightDirectionPaint.color = directionColor + + bottomDirectionPaint = Paint() + bottomDirectionPaint.isAntiAlias = true + bottomDirectionPaint.isDither = true + bottomDirectionPaint.style = Paint.Style.FILL + bottomDirectionPaint.color = directionColor + + //设置控件可触摸 + setOnTouchListener(this) + } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + canvasCenterX = (w shr 1).toFloat() + canvasCenterY = (h shr 1).toFloat() + + val outerCircleRadius = diameter.toInt() shr 1 //半径 + + centerSwitchRectF = RectF( + (canvasCenterX - (outerCircleRadius shr 2) * 0.75).toFloat(), + (canvasCenterY - (outerCircleRadius shr 2) * 0.75).toFloat(), + (canvasCenterX + (outerCircleRadius shr 2) * 0.75).toFloat(), + (canvasCenterY + (outerCircleRadius shr 2) * 0.75).toFloat() + ) + + // 大外圈区域 + outerCircleRectF = RectF( + canvasCenterX - outerCircleRadius - borderStroke, + canvasCenterY - outerCircleRadius - borderStroke, + canvasCenterX + outerCircleRadius + borderStroke, + canvasCenterY + outerCircleRadius + borderStroke + ) + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + val minimumWidth = suggestedMinimumWidth + val minimumHeight = suggestedMinimumHeight + val width = measureWidth(minimumWidth, widthMeasureSpec) + val height = measureHeight(minimumHeight, heightMeasureSpec) + setMeasuredDimension(width, height) + } + + private fun measureWidth(defaultWidth: Int, measureSpec: Int): Int { + var width = defaultWidth + val specMode = MeasureSpec.getMode(measureSpec) + val specSize = MeasureSpec.getSize(measureSpec) + when (specMode) { + MeasureSpec.AT_MOST -> width = (diameter + borderStroke * 2).toInt() + MeasureSpec.EXACTLY -> width = specSize + MeasureSpec.UNSPECIFIED -> width = defaultWidth.coerceAtLeast(specSize) + } + return width + } + + private fun measureHeight(defaultHeight: Int, measureSpec: Int): Int { + var height = defaultHeight + val specMode = MeasureSpec.getMode(measureSpec) + val specSize = MeasureSpec.getSize(measureSpec) + when (specMode) { + MeasureSpec.AT_MOST -> height = (diameter + borderStroke * 2).toInt() + MeasureSpec.EXACTLY -> height = specSize + MeasureSpec.UNSPECIFIED -> height = defaultHeight.coerceAtLeast(specSize) + } + return height + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val outerCircleRadius = diameter.toInt() shr 1 //半径 + //背景 + canvas.drawCircle( + canvasCenterX, + canvasCenterY, + outerCircleRadius.toFloat(), + backgroundPaint + ) + + //外圆圆圈 + canvas.drawCircle( + canvasCenterX, + canvasCenterY, + outerCircleRadius.toFloat(), + borderPaint + ) + + //内部圆背景 + innerCircleRadius = (directionDiameter.toInt() shl 1).toFloat() + canvas.drawCircle( + canvasCenterX, + canvasCenterY, + innerCircleRadius, + centerPaint + ) + + //周围四个方向小点 + canvas.drawCircle( + (canvasCenterX - outerCircleRadius * 0.75).toFloat(), + canvasCenterY, + (directionDiameter.toInt() shr 1).toFloat(), + leftDirectionPaint + ) + + canvas.drawCircle( + (canvasCenterX + outerCircleRadius * 0.75).toFloat(), + canvasCenterY, + (directionDiameter.toInt() shr 1).toFloat(), + topDirectionPaint + ) + + canvas.drawCircle( + canvasCenterX, + (canvasCenterY - outerCircleRadius * 0.75).toFloat(), + (directionDiameter.toInt() shr 1).toFloat(), + rightDirectionPaint + ) + + canvas.drawCircle( + canvasCenterX, + (canvasCenterY + outerCircleRadius * 0.75).toFloat(), + (directionDiameter.toInt() shr 1).toFloat(), + bottomDirectionPaint + ) + + //中间开关 + canvas.drawArc( + centerSwitchRectF, -50f, 280f, false, switchPaint + ) + canvas.drawLine( + canvasCenterX, + canvasCenterY - (directionDiameter * 1.2).toFloat(), + canvasCenterX, + canvasCenterY - (directionDiameter * 0.5).toFloat(), + switchPaint + ) + invalidate() + } + + override fun onTouch(v: View, event: MotionEvent): Boolean { + val x: Float = event.x + val y: Float = event.y + when (event.action) { + MotionEvent.ACTION_DOWN -> { + //(x,y)点到(canvasCenterX,canvasCenterY)的距离 + val distance = sqrt( + abs(x - canvasCenterX).pow(2) + abs(y - canvasCenterY).pow(2) + ) +// Log.d(kTag, "onTouch: [$x,$y]") + + // 计算角度正弦值 + val sinAngle = (y - canvasCenterY) / distance +// Log.d(kTag, "sinAngle: $sinAngle") + + val sin = sin(Math.PI / 4) + + // 计算点击的距离,区分点击的是环还是中心位置 + setDefaultValue() + + // 判断 + if (distance > innerCircleRadius) { + if ((x - canvasCenterX) < 0 && abs(sinAngle) < sin) { + leftTurn = true + listener?.onLeftTurn() + } else if ((y - canvasCenterY) > 0 && abs(sinAngle) > sin) { + bottomTurn = true + listener?.onBottomTurn() + } else if ((x - canvasCenterX) > 0 && abs(sinAngle) < sin) { + rightTurn = true + listener?.onRightTurn() + } else if ((y - canvasCenterY) < 0 && abs(sinAngle) > sin) { + topTurn = true + listener?.onTopTurn() + } + } else { + centerTurn = true + listener?.onCenterTurn() + } + } + + MotionEvent.ACTION_UP -> { + if (leftTurn) { + leftTurn = false + listener?.onActionTurnUp(Direction.LEFT) + } else if (topTurn) { + topTurn = false + listener?.onActionTurnUp(Direction.TOP) + } else if (rightTurn) { + rightTurn = false + listener?.onActionTurnUp(Direction.RIGHT) + } else if (bottomTurn) { + bottomTurn = false + listener?.onActionTurnUp(Direction.BOTTOM) + } else { + centerTurn = false + listener?.onActionTurnUp(Direction.CENTER) + } + } + } + return true + } + + //每次手指抬起都重置方向状态 + private fun setDefaultValue() { + leftTurn = false + topTurn = false + rightTurn = false + bottomTurn = false + centerTurn = false + } + + private var listener: OnWheelTouchListener? = null + + interface OnWheelTouchListener { + /** + * 左 + */ + fun onLeftTurn() + + /** + * 上 + */ + fun onTopTurn() + + /** + * 右 + */ + fun onRightTurn() + + /** + * 下 + */ + fun onBottomTurn() + + /** + * 中间 + */ + fun onCenterTurn() + + /** + * 松开 + */ + fun onActionTurnUp(dir: Direction) + } + + fun setOnWheelTouchListener(listener: OnWheelTouchListener?) { + this.listener = listener + } + + enum class Direction { + LEFT, TOP, RIGHT, BOTTOM, CENTER + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt index d0b247b..3c1cfe2 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/Direction.kt @@ -1,22 +1,23 @@ package com.casic.br.operationsite.extensions -import com.pengxh.kt.lite.widget.SteeringWheelController +import com.casic.br.operationsite.widgets.SteeringWheelView -fun SteeringWheelController.Direction.createStartCommand(): ByteArray { + +fun SteeringWheelView.Direction.createStartCommand(): ByteArray { when (this) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x04.toByte(), 0xFF.toByte(), 0x00, 0x04.toByte() ) } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { //Byte 6 (Data 2) - 竖直速度, 值从 00 (停止) 到 3F return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x08.toByte(), 0x00, 0xFF.toByte(), 0x08.toByte() ) } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { //Byte 5 (Data 1) - 水平速度, 值从 00 (停止) 到 3F (高速) return byteArrayOf( 0xFF.toByte(), 0x01, 0x00, 0x02.toByte(), 0xFF.toByte(), 0x00, 0x02.toByte() diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 13cb09f..1b22adb 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -134,7 +134,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -146,7 +146,7 @@ * 声光报警开关状态 */ suspend fun getAlarmState(): String { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) @@ -256,7 +256,7 @@ "application/json;charset=UTF-8".toMediaType() ) - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.133").toString() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString() val regionApi by lazy { val httpConfig = "http://${host}:5000" RetrofitFactory.createRetrofit(httpConfig) diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index f50c0f7..ace8e16 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -34,5 +34,6 @@ const val WIFI_PASSWORD = "zhsz20311hw" const val UDP_HOST = "udpServer" const val UDP_PORT = 9000 + const val TCP_HOST = "tcpServer" const val TCP_PORT = 9000 } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt index 2ee2c03..39675f1 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt @@ -23,6 +23,7 @@ import com.casic.br.operationsite.utils.hk.MessageCodeHub import com.casic.br.operationsite.utils.hk.SDKGuider import com.casic.br.operationsite.vm.RegionViewModel +import com.casic.br.operationsite.widgets.SteeringWheelView import com.gyf.immersionbar.ImmersionBar import com.hikvision.netsdk.HCNetSDK import com.hikvision.netsdk.NET_DVR_PREVIEWINFO @@ -31,7 +32,6 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.widget.SteeringWheelController import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_hikvision.* import kotlinx.android.synthetic.main.include_option_title.* @@ -148,22 +148,22 @@ } wheelController.setOnWheelTouchListener(object : - SteeringWheelController.OnWheelTouchListener { - override fun onActionTurnUp(dir: SteeringWheelController.Direction) { + SteeringWheelView.OnWheelTouchListener { + override fun onActionTurnUp(dir: SteeringWheelView.Direction) { when (dir) { - SteeringWheelController.Direction.LEFT -> { + SteeringWheelView.Direction.LEFT -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_LEFT, 1) isActionUp = true } - SteeringWheelController.Direction.TOP -> { + SteeringWheelView.Direction.TOP -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.TILT_UP, 1) isActionUp = true } - SteeringWheelController.Direction.RIGHT -> { + SteeringWheelView.Direction.RIGHT -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_RIGHT, 1) isActionUp = true } - SteeringWheelController.Direction.BOTTOM -> { + SteeringWheelView.Direction.BOTTOM -> { hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.TILT_DOWN, 1) isActionUp = true } diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 26c0f8d..95b6fcb 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -19,6 +19,7 @@ import com.casic.br.operationsite.utils.netty.tcp.SocketManager import com.casic.br.operationsite.vm.AlarmViewModel import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.widgets.SteeringWheelView import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -26,12 +27,9 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.SteeringWheelController -import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_methane.* -import kotlinx.android.synthetic.main.include_option_title.* - +import kotlinx.android.synthetic.main.include_base_title.* class MethaneActivity : KotlinBaseActivity(), Handler.Callback { @@ -97,36 +95,36 @@ override fun handleMessage(msg: Message): Boolean { if (msg.what == 2023072101) { tcpStateView.setBackgroundColor(R.color.greenColor.convertColor(this)) - rightOptionView.text = "已连接" + connectButton.isEnabled = false + addressView.isEnabled = false } else if (msg.what == 2023072102) { tcpStateView.setBackgroundColor(R.color.redTextColor.convertColor(this)) - rightOptionView.text = "已断开" + connectButton.isEnabled = true + addressView.isEnabled = true } return true } + override fun onResume() { + super.onResume() + val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.139").toString() + addressView.setText(host) + } + override fun initEvent() { leftBackView.setOnClickListener { finish() } //连接TCP - rightOptionView.setOnClickListener { - val host = SaveKeyValues.getValue(LocaleConstant.UDP_HOST, "192.168.10.139").toString() - AlertInputDialog.Builder() - .setContext(this) - .setTitle("请输入一体机IP地址") - .setHintMessage(host) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertInputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - SaveKeyValues.putValue(LocaleConstant.UDP_HOST, value) + connectButton.setOnClickListener { + if (addressView.text.isNullOrBlank()) { + "请输入正确的指令地址".show(this) + return@setOnClickListener + } + val value = addressView.text.toString() - SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT) - } + SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value) - override fun onCancelClick() {} - }).build().show() + SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT) } val bottomActionSheet = BottomActionSheet.Builder() @@ -190,12 +188,12 @@ } wheelController.setOnWheelTouchListener(object : - SteeringWheelController.OnWheelTouchListener { - override fun onActionTurnUp(dir: SteeringWheelController.Direction) { - if (dir == SteeringWheelController.Direction.LEFT || - dir == SteeringWheelController.Direction.TOP || - dir == SteeringWheelController.Direction.RIGHT || - dir == SteeringWheelController.Direction.BOTTOM + SteeringWheelView.OnWheelTouchListener { + override fun onActionTurnUp(dir: SteeringWheelView.Direction) { + if (dir == SteeringWheelView.Direction.LEFT || + dir == SteeringWheelView.Direction.TOP || + dir == SteeringWheelView.Direction.RIGHT || + dir == SteeringWheelView.Direction.BOTTOM ) { SocketManager.get.send(createStopCommand()) isActionUp = true @@ -215,28 +213,28 @@ override fun onLeftTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.LEFT.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.LEFT.createStartCommand()) isActionUp = false } } override fun onTopTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.TOP.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.TOP.createStartCommand()) isActionUp = false } } override fun onRightTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.RIGHT.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.RIGHT.createStartCommand()) isActionUp = false } } override fun onBottomTurn() { if (isActionUp) { - SocketManager.get.send(SteeringWheelController.Direction.BOTTOM.createStartCommand()) + SocketManager.get.send(SteeringWheelView.Direction.BOTTOM.createStartCommand()) isActionUp = false } } diff --git a/app/src/main/java/com/casic/br/operationsite/widgets/SteeringWheelView.kt b/app/src/main/java/com/casic/br/operationsite/widgets/SteeringWheelView.kt new file mode 100644 index 0000000..ec48642 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/widgets/SteeringWheelView.kt @@ -0,0 +1,386 @@ +package com.casic.br.operationsite.widgets + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.util.AttributeSet +import android.view.MotionEvent +import android.view.View +import com.casic.br.operationsite.R +import kotlin.math.abs +import kotlin.math.pow +import kotlin.math.sin +import kotlin.math.sqrt + +class SteeringWheelView constructor(context: Context, attrs: AttributeSet) : + View(context, attrs), View.OnTouchListener { + private val kTag = "SteeringWheelView" + + //画布中心x + private var canvasCenterX = 0f + + //画布中心y + private var canvasCenterY = 0f + + //控件直径 + private val diameter: Float + + //四个方位小点直径 + private val directionDiameter: Float + + //内部圆半径 + private var innerCircleRadius: Float = 0.0f + + //外圆区域 + private lateinit var outerCircleRectF: RectF + + //内部开关区域 + private lateinit var centerSwitchRectF: RectF + + //线条粗细 + private val borderStroke: Float + + //Paint + private val backgroundPaint: Paint + private val borderPaint: Paint + private val centerPaint: Paint + private val leftDirectionPaint: Paint + private val topDirectionPaint: Paint + private val rightDirectionPaint: Paint + private val bottomDirectionPaint: Paint + private val switchPaint: Paint + + //Color + private val directionColor: Int + private val switchColor: Int + + // 各控件使用状态 + private var leftTurn = false + private var topTurn = false + private var rightTurn = false + private var bottomTurn = false + private var centerTurn = false + + init { + val type = context.obtainStyledAttributes(attrs, R.styleable.SteeringWheelView) + diameter = type.getDimension( + R.styleable.SteeringWheelView_ctrl_diameter, 200f + ) + val borderColor = type.getColor( + R.styleable.SteeringWheelView_ctrl_borderColor, Color.CYAN + ) + val backgroundColor = type.getColor( + R.styleable.SteeringWheelView_ctrl_backgroundColor, Color.WHITE + ) + borderStroke = type.getDimension( + R.styleable.SteeringWheelView_ctrl_borderStroke, 5f + ) + switchColor = type.getColor( + R.styleable.SteeringWheelView_ctrl_switchColor, Color.WHITE + ) + directionColor = type.getColor( + R.styleable.SteeringWheelView_ctrl_directionColor, Color.BLUE + ) + directionDiameter = type.getDimension( + R.styleable.SteeringWheelView_ctrl_directionDiameter, 15f + ) + type.recycle() + + borderPaint = Paint() + borderPaint.isAntiAlias = true + borderPaint.isDither = true + borderPaint.style = Paint.Style.STROKE + borderPaint.strokeWidth = borderStroke + borderPaint.color = borderColor + + backgroundPaint = Paint() + backgroundPaint.isAntiAlias = true + backgroundPaint.isDither = true + backgroundPaint.style = Paint.Style.FILL + backgroundPaint.color = backgroundColor + + centerPaint = Paint() + centerPaint.isAntiAlias = true + centerPaint.isDither = true + centerPaint.style = Paint.Style.FILL + centerPaint.color = borderColor + + switchPaint = Paint() + switchPaint.isAntiAlias = true + switchPaint.isDither = true + switchPaint.style = Paint.Style.STROKE + switchPaint.strokeWidth = borderStroke + switchPaint.strokeCap = Paint.Cap.ROUND + switchPaint.color = switchColor + + leftDirectionPaint = Paint() + leftDirectionPaint.isAntiAlias = true + leftDirectionPaint.isDither = true + leftDirectionPaint.style = Paint.Style.FILL + leftDirectionPaint.color = directionColor + + topDirectionPaint = Paint() + topDirectionPaint.isAntiAlias = true + topDirectionPaint.isDither = true + topDirectionPaint.style = Paint.Style.FILL + topDirectionPaint.color = directionColor + + rightDirectionPaint = Paint() + rightDirectionPaint.isAntiAlias = true + rightDirectionPaint.isDither = true + rightDirectionPaint.style = Paint.Style.FILL + rightDirectionPaint.color = directionColor + + bottomDirectionPaint = Paint() + bottomDirectionPaint.isAntiAlias = true + bottomDirectionPaint.isDither = true + bottomDirectionPaint.style = Paint.Style.FILL + bottomDirectionPaint.color = directionColor + + //设置控件可触摸 + setOnTouchListener(this) + } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + canvasCenterX = (w shr 1).toFloat() + canvasCenterY = (h shr 1).toFloat() + + val outerCircleRadius = diameter.toInt() shr 1 //半径 + + centerSwitchRectF = RectF( + (canvasCenterX - (outerCircleRadius shr 2) * 0.75).toFloat(), + (canvasCenterY - (outerCircleRadius shr 2) * 0.75).toFloat(), + (canvasCenterX + (outerCircleRadius shr 2) * 0.75).toFloat(), + (canvasCenterY + (outerCircleRadius shr 2) * 0.75).toFloat() + ) + + // 大外圈区域 + outerCircleRectF = RectF( + canvasCenterX - outerCircleRadius - borderStroke, + canvasCenterY - outerCircleRadius - borderStroke, + canvasCenterX + outerCircleRadius + borderStroke, + canvasCenterY + outerCircleRadius + borderStroke + ) + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + val minimumWidth = suggestedMinimumWidth + val minimumHeight = suggestedMinimumHeight + val width = measureWidth(minimumWidth, widthMeasureSpec) + val height = measureHeight(minimumHeight, heightMeasureSpec) + setMeasuredDimension(width, height) + } + + private fun measureWidth(defaultWidth: Int, measureSpec: Int): Int { + var width = defaultWidth + val specMode = MeasureSpec.getMode(measureSpec) + val specSize = MeasureSpec.getSize(measureSpec) + when (specMode) { + MeasureSpec.AT_MOST -> width = (diameter + borderStroke * 2).toInt() + MeasureSpec.EXACTLY -> width = specSize + MeasureSpec.UNSPECIFIED -> width = defaultWidth.coerceAtLeast(specSize) + } + return width + } + + private fun measureHeight(defaultHeight: Int, measureSpec: Int): Int { + var height = defaultHeight + val specMode = MeasureSpec.getMode(measureSpec) + val specSize = MeasureSpec.getSize(measureSpec) + when (specMode) { + MeasureSpec.AT_MOST -> height = (diameter + borderStroke * 2).toInt() + MeasureSpec.EXACTLY -> height = specSize + MeasureSpec.UNSPECIFIED -> height = defaultHeight.coerceAtLeast(specSize) + } + return height + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val outerCircleRadius = diameter.toInt() shr 1 //半径 + //背景 + canvas.drawCircle( + canvasCenterX, + canvasCenterY, + outerCircleRadius.toFloat(), + backgroundPaint + ) + + //外圆圆圈 + canvas.drawCircle( + canvasCenterX, + canvasCenterY, + outerCircleRadius.toFloat(), + borderPaint + ) + + //内部圆背景 + innerCircleRadius = (directionDiameter.toInt() shl 1).toFloat() + canvas.drawCircle( + canvasCenterX, + canvasCenterY, + innerCircleRadius, + centerPaint + ) + + //周围四个方向小点 + canvas.drawCircle( + (canvasCenterX - outerCircleRadius * 0.75).toFloat(), + canvasCenterY, + (directionDiameter.toInt() shr 1).toFloat(), + leftDirectionPaint + ) + + canvas.drawCircle( + (canvasCenterX + outerCircleRadius * 0.75).toFloat(), + canvasCenterY, + (directionDiameter.toInt() shr 1).toFloat(), + topDirectionPaint + ) + + canvas.drawCircle( + canvasCenterX, + (canvasCenterY - outerCircleRadius * 0.75).toFloat(), + (directionDiameter.toInt() shr 1).toFloat(), + rightDirectionPaint + ) + + canvas.drawCircle( + canvasCenterX, + (canvasCenterY + outerCircleRadius * 0.75).toFloat(), + (directionDiameter.toInt() shr 1).toFloat(), + bottomDirectionPaint + ) + + //中间开关 + canvas.drawArc( + centerSwitchRectF, -50f, 280f, false, switchPaint + ) + canvas.drawLine( + canvasCenterX, + canvasCenterY - (directionDiameter * 1.2).toFloat(), + canvasCenterX, + canvasCenterY - (directionDiameter * 0.5).toFloat(), + switchPaint + ) + invalidate() + } + + override fun onTouch(v: View, event: MotionEvent): Boolean { + val x: Float = event.x + val y: Float = event.y + when (event.action) { + MotionEvent.ACTION_DOWN -> { + //(x,y)点到(canvasCenterX,canvasCenterY)的距离 + val distance = sqrt( + abs(x - canvasCenterX).pow(2) + abs(y - canvasCenterY).pow(2) + ) +// Log.d(kTag, "onTouch: [$x,$y]") + + // 计算角度正弦值 + val sinAngle = (y - canvasCenterY) / distance +// Log.d(kTag, "sinAngle: $sinAngle") + + val sin = sin(Math.PI / 4) + + // 计算点击的距离,区分点击的是环还是中心位置 + setDefaultValue() + + // 判断 + if (distance > innerCircleRadius) { + if ((x - canvasCenterX) < 0 && abs(sinAngle) < sin) { + leftTurn = true + listener?.onLeftTurn() + } else if ((y - canvasCenterY) > 0 && abs(sinAngle) > sin) { + bottomTurn = true + listener?.onBottomTurn() + } else if ((x - canvasCenterX) > 0 && abs(sinAngle) < sin) { + rightTurn = true + listener?.onRightTurn() + } else if ((y - canvasCenterY) < 0 && abs(sinAngle) > sin) { + topTurn = true + listener?.onTopTurn() + } + } else { + centerTurn = true + listener?.onCenterTurn() + } + } + + MotionEvent.ACTION_UP -> { + if (leftTurn) { + leftTurn = false + listener?.onActionTurnUp(Direction.LEFT) + } else if (topTurn) { + topTurn = false + listener?.onActionTurnUp(Direction.TOP) + } else if (rightTurn) { + rightTurn = false + listener?.onActionTurnUp(Direction.RIGHT) + } else if (bottomTurn) { + bottomTurn = false + listener?.onActionTurnUp(Direction.BOTTOM) + } else { + centerTurn = false + listener?.onActionTurnUp(Direction.CENTER) + } + } + } + return true + } + + //每次手指抬起都重置方向状态 + private fun setDefaultValue() { + leftTurn = false + topTurn = false + rightTurn = false + bottomTurn = false + centerTurn = false + } + + private var listener: OnWheelTouchListener? = null + + interface OnWheelTouchListener { + /** + * 左 + */ + fun onLeftTurn() + + /** + * 上 + */ + fun onTopTurn() + + /** + * 右 + */ + fun onRightTurn() + + /** + * 下 + */ + fun onBottomTurn() + + /** + * 中间 + */ + fun onCenterTurn() + + /** + * 松开 + */ + fun onActionTurnUp(dir: Direction) + } + + fun setOnWheelTouchListener(listener: OnWheelTouchListener?) { + this.listener = listener + } + + enum class Direction { + LEFT, TOP, RIGHT, BOTTOM, CENTER + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_hikvision.xml b/app/src/main/res/layout/activity_hikvision.xml index bc0ce45..406077a 100644 --- a/app/src/main/res/layout/activity_hikvision.xml +++ b/app/src/main/res/layout/activity_hikvision.xml @@ -52,15 +52,14 @@ android:layout_height="@dimen/titleViewHeight" android:gravity="center_vertical" android:paddingHorizontal="@dimen/dp_7" - android:text="摄像头配置" + android:text="摄像头IP配置" android:textColor="@color/mainTextColor" android:textSize="@dimen/sp_16" /> - + android:layout_height="@dimen/titleViewHeight"> - + +