我现在正在Android Studio中使用Kotlin制作android应用,并希望在已经绘制的自定义视图上绘制。
这个应用程序是简单的应用程序,用于显示带有串行端口的图形信息以及接收到的数据。实际上,我是Kotlin的新手,而Java / Android的新手。这是有问题的代码。
这是自定义视图的XML,(位于contraintlayout中)
<!--activity_main.xml-->
<androidx.constraintlayout.widget.ConstraintLayout ... >
<com.(...).DrawUI
android:id="@+id/DrawUI" ...
/>
尝试在此线程上调用绘图函数'DrawRxData(rxData)'
//BluetoothController.kt
class BluetoothClient(private val activity: MainActivity,
private val socket:BluetoothSocket): Thread() {
override fun run() {
...
if(inputStream.available() > 0) {
...
inputStream.read(buffer)
val rxData = BluetoothRxParser(buffer)
DrawRxData(rxData)
...
}
...
}
}
这是上面在XML上编写的DrawUI 我想在此视图上通过BluetoothController.kt中的调用函数绘制一些内容!
//DrawUI.kt
class DrawUI(context: Context, attrs: AttributeSet?) : View(context, attrs) {
init {
// initializing Paint()s
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
// measuring dimension and determine drawing sector
}
override fun onDraw(canvas: Canvas) {
// drawing background
}
}
我尝试在DrawUI类上使用Canvas,但无法正常工作。 也尝试制作位图,但是宽度和高度为零会发生错误。我该如何解决这个问题?
这种方式是我解决此问题的方式,也许还有另一个简单的解决方案。
<ImageView
android:id="@+id/DrawRx" ...
/>
private fun DrawRxData (rxData: RxData) {
val v : View = activity.findViewById(R.id.DrawRx)
val iv : ImageView = v as ImageView
val bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val paint = Paint(Paint.ANTI_ALIAS_FLAG)
paint.setColor(Color.BLACK)
canvas.drawCircle(50F, 50F, 10F, paint)
activity.runOnUiThread(java.lang.Runnable {
iv.setImageBitmap(bitmap)
})
实际上只是重叠存在的视图,如果有有效的方法,请回答!