离开父母时Android视图消失

Posted

技术标签:

【中文标题】离开父母时Android视图消失【英文标题】:Android View Disappearing When Go Outside Of Parent 【发布时间】:2013-08-05 00:19:13 【问题描述】:

我在这个 LinearLayout 中有一个 LinearLayout 和 ImageView。

ImageView有翻译效果。

// v = ImageView    
ObjectAnimator animation2 = ObjectAnimator.ofFloat(v, "translationY", 200);
                        animation2.setDuration(3000);
                        animation2.setTarget(v);
                        animation2.start();

动画工作,但当 ImageView 超出 LinearLayout 时它消失了。

如何在不修改 LinearLayout 高度的情况下修复它。

【问题讨论】:

【参考方案1】:

找到ImageView所属的ViewGroup并应用ViewGroup.setClipChildren(false)。 默认情况下,子项的绘制仅限于父 ViewGroup 的边界。

【讨论】:

在 XML 上设置 LinearLayout 的 android:clipChildren="false"但没有任何改变? 我已将 clipChildren="false" 设置为 ImageView 的所有父级(我的意思是 LinearLayout 的父级)。它正在工作。谢谢。 如果还没有向下滚动,请参阅下面 maxwell 的答案。也设置android:clipToPadding="false" @Eray:我们可以处理对该 ImageView 的点击吗? 您可能不仅要为直接父 ViewGroup 设置剪辑子项,还需要为层次结构中的其他 ViewGroups 设置剪辑子项。【参考方案2】:

存在两个可能导致这种情况发生的属性:clipChildren 和clipToPadding。您需要将每个父 ViewGroup 的 clipChildren 设置为 false,对象将在其边界之外进行动画处理。您还需要将 clipToPadding 设置为直接父级(也许更多,但我还没有看到它的案例)。

您可以在 XML 中设置这两个属性

android:clipChildren="false"
android:clipToPadding="false"

或在代码中

viewGroup.setClipChildren(false);
viewGroup.setClipToPadding(false);

【讨论】:

我个人也不得不将每个父母的 clipToPadding 设置为 false。很奇怪。 Each parent ViewGroup 是关键!感谢您的回答。 这很有帮助。谢谢老哥! 完全正确! 1) 将 clipChildren 设置为 每个父 false它的边界是视图。 2) 将clipToPadding 设置为false 用于直系父母。但正如我尝试的那样,RelativeLayout 仍然不起作用。见here。【参考方案3】:

我的实现。它可能可以帮助某人:

Java 版本:

public static void setAllParentsClip(View v, boolean enabled) 
    while (v.getParent() != null && v.getParent() instanceof ViewGroup) 
        ViewGroup viewGroup = (ViewGroup) v.getParent();
        viewGroup.setClipChildren(enabled);
        viewGroup.setClipToPadding(enabled);
        v = viewGroup;
    

调用 setAllParentsClip(yourView, false); 禁用所有父母的剪辑。

已编辑:

作为扩展函数的 Kotlin 版本:

fun View.setAllParentsClip(enabled: Boolean) 
    var parent = parent
    while (parent is ViewGroup) 
        parent.clipChildren = enabled
        parent.clipToPadding = enabled
        parent = parent.parent
    

电话:yourView.setAllParentsClip(false)

【讨论】:

您确定要应用 setAllParentsClip(yourView, false);到正确的观点?您确定您面临与所问问题相同的问题吗?很抱歉,我真的不知道为什么它不适合你?【参考方案4】:

在我的例子中,clipChildren 除了 clipToPadding="false" 解决了这个问题之外什么也没做。去图吧。

【讨论】:

【参考方案5】:

获取视图高度,然后将高度的百分比添加到它将滑动到的位置

public void SlideUp(View view)
     float height = view.getHeight();

     TranslateAnimation animate = new TranslateAnimation(0,0,0,0);   

     animate.setDuration(500);
     animate.setFillAfter(true);

     view.animate().translationY((float)(0-0.62*height)).start(); 
     view.startAnimation(animate);

【讨论】:

【参考方案6】:
try to update camera position as in my case below:
 ValueAnimator lockAnimator = ValueAnimator.ofFloat(1, 0);     // value from 0 to 1
                lockAnimator.setDuration(500);
                lockAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() 
                    @Override
                    public void onAnimationUpdate(ValueAnimator pAnimation) 
                        float value = (Float) (pAnimation.getAnimatedValue());
                        if (value < .6 && flipped) 
                            if (preview != null)
                                mCanvasImage.setImageBitmap(preview);
                            else
                                mCanvasImage.setImageBitmap(imageBitmap);
                            flipped = false;
                        
                        if (value > .3 && value < .7) 
                            lyt_rlt_container.setCameraDistance(lyt_rlt_container.getCameraDistance() - 100);
                         else 
                            lyt_rlt_container.setCameraDistance(lyt_rlt_container.getCameraDistance() + 100);
                        
                        lyt_rlt_container.setRotationY(180 * value);

                    
                );
                lockAnimator.start();

【讨论】:

以上是关于离开父母时Android视图消失的主要内容,如果未能解决你的问题,请参考以下文章

在我的 android 应用程序中滚动列表视图时,数据正在消失。我在片段中使用列表视图

奇怪的列表视图项目选择器外观(手指离开屏幕时未移除按下状态)

Android Espresso - 嵌套父母的组合视图匹配器

Android:隐形和消失的区别?

如何在 recyclerview 适配器中将动态视图添加到 android 布局

当单元格即将离开屏幕时,UICollectionView Cell 的阴影突然消失