背景
我写了一个基于 Android 的自定义视图LinearLayout
我称之为ReflectingLayout
。这个想法相当简单,在声明的任何子视图下面渲染反射效果ReflectingLayout
. e.g...
我通过覆盖来实现这一目标dispatchDraw()
in 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);
}
问题
If my ReflectingLayout
比方说,包含一个TextView
我改变了它的文本内容TextView
反射效果没有更新。
我相信这是因为Android只会重绘TextView
它本身而不是所有家长的观点,这意味着我被覆盖dispatchDraw()
方法不会被调用。
是否有任何简单的方法可以触发父视图的重绘以响应其任何子视图的更改?
特别是,我怎样才能使我的ReflectingLayout
当子视图重绘时重绘?
我已经考虑过的事情
我注意到有一个新的View.OnLayoutChangeListener http://developer.android.com/reference/android/view/View.OnLayoutChangeListener.html已在 API 级别 11 中添加。大概这可用于注册父视图的回调并触发重绘(?)。无论如何,我需要一个可以在 API 级别 7 及以上版本上运行的解决方案。
我可以简单地扩展TextView
以及我想在其中声明的任何其他 View 类ReflectingLayout
在重绘时使它们的父级无效,但这是一个笨拙的解决方案。
收到的任何帮助(包括您认为整体方法是错误的)。
Thanks.
使用怎么样getParent()
您认为方法?像这样的事情:
if (getParent() instanceof View)
((View) getParent()).invalidate();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)