Android - создать горизонтальную / вертикальную полосу поперек вида - PullRequest
0 голосов
/ 01 декабря 2018

Итак, у меня есть квадрат

Tile : View

, упорядоченный в квадрат GridLayout.

(Точнее, у меня есть GridLayout, который я заполняю Tiles, а затем принудительно привести к квадратным размерам.)

У нас есть EmptyTile : Tile и ButtonTile : Tile, где ButtonTile s кликабельны, а EmptyTile s нет.

Допустим, мы имееммакет, который выглядит примерно так:

BEEBEEB
EEEEEEE
BEEBEEB

(где каждый B является ButtonTile, а каждый E является EmptyTile.)

Теперь я хочузамените некоторые EmptyTile s на плитки, которые содержат горизонтальные или вертикальные полосы для соединения ближайших ButtonTiles.Т.е.:

B--B--B
|EE|EE|
B--B--B

Как лучше всего сгенерировать эти плитки плитки, если мое единственное требование состоит в том, чтобы у бара должен был быть настраиваемый цвет?

ButtonTile s, например, изменить их цвет на основев некотором внутреннем состоянии (активном, выбираемом, выделенном и т. д.), которое устанавливается onDraw (каждое изменение внутреннего состояния вызывает invalidate()).

Т.е.:

override fun onDraw(canvas: Canvas) {
    val colorID = when(state){
        ACTIVE -> if(isHighlighted) R.color.tile_activeHighlight else R.color.tile_activeNormal
        SELECTABLE -> if(isHighlighted) R.color.tile_selectableHighlight else R.color.tile_selectableNormal
        UNSELECTABLE -> if(isHighlighted) R.color.tile_unselectableHighlight else R.color.tile_unselectableNormal
        //[...]
    }

    val newColor = ContextCompat.getColor(context,colorID)
    canvas.drawColor(newColor)
}

И я бы очень хотел сохранить эту функциональность для плиток панели.

Очевидно, , я могу просто создавать изображения с прозрачностью и накладывать их на плитки, но это означает, чтоЯ не могу программно контролировать цвет (ы) наложения, поэтому я ищу более сложное решение, если оно существует.

...