Рендеринг ViewGroup на холсте - PullRequest
0 голосов
/ 26 марта 2020

Я реализую небольшую библиотеку для простого добавления настраиваемых действий смахивания представления в RecyclerView. Во время моей реализации я столкнулся с проблемой при визуализации представлений на холсте. Я приложил gif здесь, чтобы продемонстрировать проблему:

Showcase

Рисуя вид смахивания на холсте, я делаю следующее:

    private fun renderSwipeView(
        view: View,
        c: Canvas,
        width: Int,
        height: Int,
        transX: Float,
        transY: Float
    ) {
        view.measure(
            View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY),
            View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY)
        )
        view.layout(0, 0, width, height)

        c.withTranslation(transX, transY) {
            view.draw(c)
        }
    }

Обычно это работает нормально, но я вижу проблемы с рендерингом с типами представлений. В GIF i Зеленый макет - это квадрат, который центрирован по верху макета. Так что я знаю, что макет отображается в правильном размере, а расположение элементов выполнено правильно.

Проблема 1: синие прямоугольники TextView с singleLine=true, так как я хочу, чтобы текст был аккуратно раскрыт элементом сверху. Смахивание вправо в основном работает нормально, однако при пролистывании влево текст не отображается вообще. Я попытался отрисовать этот же случай, не разыскивая его на холсте, который отлично работает. Я пропускаю какую-то часть при рендеринге моего вида на холсте?

Проблема 2: Не очень большая проблема, но вид смахивания (красный / оранжевый контейнер) будет отображаться вне его макета. Я мог бы легко исправить это, используя canvas.clipRect() на холсте, но я бы хотел устранить причину root, а не делать обходной путь.

Весь исходный код этой демонстрации можно увидеть здесь .

Спасибо С уважением

1 Ответ

0 голосов
/ 26 марта 2020

Относительно вопроса 1: Мне только что удалось выпустить первый номер. Похоже, что это связано с ошибкой в ​​TextView, при переключении на AppCompatTextView проблема была решена.

...