Итак, у меня есть квадрат
Tile : View
, упорядоченный в квадрат GridLayout
.
(Точнее, у меня есть GridLayout
, который я заполняю Tile
s, а затем принудительно привести к квадратным размерам.)
У нас есть 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)
}
И я бы очень хотел сохранить эту функциональность для плиток панели.
Очевидно, , я могу просто создавать изображения с прозрачностью и накладывать их на плитки, но это означает, чтоЯ не могу программно контролировать цвет (ы) наложения, поэтому я ищу более сложное решение, если оно существует.