Как нарисовать что-то на существующий пользовательский вид? - PullRequest
1 голос
/ 22 октября 2019

Я делаю Android-приложение с Kotlin в android studio и хочу рисовать на уже нарисованном пользовательском представлении.

Это простое приложение, отображающее графическую информацию с полученными данными через последовательный порт. На самом деле я новичок в Kotlin и новичок на Java / Android. Это код, который имеет проблемы.

Это XML пользовательского представления, (он находится в контринтауте)

<!--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)
                    ...
                }
        ...
    }
}

И это DrawUI, который написал выше на XML. Я хочу нарисовать что-то в этом представлении с помощью функции вызова в 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
    }
}

Я пытался использовать Canvas на DrawUIкласс, но он не работал должным образом. Также попытался сделать растровое изображение, но возникает ошибка, что ширина и высота равны нулю. Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ

Таким образом, я решил эту проблему, может быть, есть другое и простое решение ..

  1. Создан ImageView, которыйимеет одинаковый размер с DrawUI на XML
    <ImageView
        android:id="@+id/DrawRx" ...
    />
Получите View и приведите к ImageView, затем создайте растровое изображение и холст. DrawRxData () находится в классе BluetoothClient.
    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)
Прикрепить растровое изображение к ImageView, но для потока, это похоже на Dispatcher в C # .. Ссылка
        activity.runOnUiThread(java.lang.Runnable {
            iv.setImageBitmap(bitmap)
        })

На самом деле только что перекрытое существующее представление, пожалуйста, ответьте, если есть работоспособныйспособ!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...