Я написал пользовательское представление Android, основанное на LinearLayout
, которое я назвал ReflectingLayout
. Идея довольно проста - отобразить эффект отражения под всеми дочерними представлениями, объявленными в ReflectingLayout
. Например...
Я добиваюсь этого, переопределяя dispatchDraw()
в ReflectingLayout
следующим образом:
@Override
protected void dispatchDraw(Canvas canvas) {
Bitmap bitmap = Bitmap.createBitmap(...);
Canvas tempCanvas = new Canvas(bitmap);
// Draw child views to bitmap using tempCanvas
super.dispatchDraw(tempCanvas);
...
// some tranformations performed on bitmap
...
// draw transformed image on to main canvas
canvas.drawBitmap(bitmap, 0, 0, null);
}
Если мой ReflectingLayout
содержит, скажем, TextView
и я изменяю текстовое содержимое этого TextView
, эффект отражения не обновляется.
Я полагаю, это происходит потому, что Android перерисовывает только сам TextView
, а не все родительские представления, то есть мой переопределенный метод dispatchDraw()
не вызывается.
Есть ли простой способ вызвать перерисовку родительского представления в ответ на изменения в любом из дочерних представлений?
В частности, как я могу заставить мой ReflectingLayout
перерисовываться, когда перерисовываются дочерние представления?
Я заметил, что новый View.OnLayoutChangeListener
был добавлен в API Level 11. Предположительно, его можно использовать для регистрации обратного вызова родительского представления и запуска перерисовки(?). В любом случае, мне нужно решение, которое будет работать на API Level 7 и выше.
Я мог бы просто расширить TextView
и любой другой класс View, который я хочу объявить внутри ReflectingLayout
, чтобы аннулировать их родителя при перерисовке, но это громоздкое решение.
Любая помощь будет принята с радостью (в том числе, если вы считаете, что общий подход неверен).
Спасибо.