移动到边界后在Android视图中重新绘制剪辑内容

移动到边界后在Android视图中重新绘制剪辑内容,android,android-layout,clipping,Android,Android Layout,Clipping,在安卓系统中,我试图将TextView从父边界外移动到视图中,但内容从未显示,或者如果部分内容已经在边界内,则仍然被剪裁 开始时的初始情况 动画后的情况 (下面是另一个视图,完全超出了范围,也没有绘制) 我有4个文本视图,在一个扩展RelativeLayout的自定义对象中,它们位于彼此下方。根据百分比,前2个应移到其边界外,而下2个应移到(从底部)内 我使用以下代码更新每个TextView的属性。在这个类中,每个变量**positionY*都由布局xml中的初始位置填充。效果是0和1之间的

在安卓系统中,我试图将
TextView
从父边界外移动到视图中,但内容从未显示,或者如果部分内容已经在边界内,则仍然被剪裁

开始时的初始情况

动画后的情况

(下面是另一个视图,完全超出了范围,也没有绘制)

我有4个
文本视图
,在一个扩展
RelativeLayout
的自定义对象中,它们位于彼此下方。根据百分比,前2个应移到其边界外,而下2个应移到(从底部)内

我使用以下代码更新每个
TextView
的属性。在这个类中,每个变量**positionY*都由布局xml中的初始位置填充。效果是0和1之间的百分比。动画可以工作,但不会再次绘制视图

public class ActionBarTitleView extends RelativeLayout {
    public void updateTransition(float effect) {
        float height = getHeight();
        titleView1.setY(title1positionY - height*effect);
        detailView1.setY(detail1positionY - height*effect);
        titleView2.setY(title2positionY - height*effect);
        detailView2.setY(detail2positionY - height*effect);
        invalidate();
    }
}
我尝试的

经过一些研究,我发现了一些问题的线索,但到目前为止,所有尝试过的选项都没有任何效果。下面是我在SO上找到并尝试过的东西的列表

对RelativeLayout调用invalidate()-无效。 取消文本视图-无效。 clipChildren=相对值为false yout-无影响。 对于RelativeLayout,setWillNotDraw=false-无影响。(正在调用onDraw)

我还没有尝试用ScrollView来解决这个问题,但我真的不想,因为它在层次结构中为一些非常小的东西添加了另一层

我以为我理解绘画的逻辑,但也许我遗漏了什么,所以我希望有人能给我指出正确的方向

我最终做了什么(9月3日)


由于没有提供真正的解决方案,我再次尝试并得出以下“解决方案”。我将两个第二个标签都设置为Visibility.GONE,但在容器视图的原始边界内。然后,当我启动动画时,我设置了它们的正确值,然后将它们移到边界之外,最后设置Visiblity.VISIBLE。动画进行时,标签将按预期滚动到视图中。因此,解决了这个问题,但没有真正解释为什么不再绘制TextView…

TextView的剪裁方式与所有其他视图不同,它们在onDraw中剪裁,视图计算为外部的部分永远不会绘制。你需要让它相信它可以在你想要的地方画出来。谢谢@JohanShogun为我指出这个。我试图在TextView上找到适合我的东西,但我不确定在这里使用什么。我应该子类化TextView并重写onDraw来做些什么吗?问题不是我想在容器边界之外绘制东西。我更希望在这些位置更新后,在它们的实际位置重新绘制它的子对象。图形确实如预期的那样,只需在子视图移动后更新即可。文本视图的剪裁方式与所有其他视图不同,它们在onDraw中剪裁,而视图计算为外部的部分永远不会绘制。你需要让它相信它可以在你想要的地方画出来。谢谢@JohanShogun为我指出这个。我试图在TextView上找到适合我的东西,但我不确定在这里使用什么。我应该子类化TextView并重写onDraw来做些什么吗?问题不是我想在容器边界之外绘制东西。我更希望在这些位置更新后,在它们的实际位置重新绘制它的子对象。该图形与预期的一样,只是需要在子视图移动后进行更新。