Android View Disappearing When Go Outside Of Parent

JavaAndroidAnimationAndroid Animation

Java Problem Overview


I have a LinearLayout and ImageView inside this LinearLayout.

There is a translation effect for ImageView.

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

Animation working but it's disappearing when ImageView go outside of LinearLayout.

How can i fix it without modify LinearLayout's height.

Java Solutions


Solution 1 - Java

Find the ViewGroup that the ImageView belongs to and apply ViewGroup.setClipChildren(false). By default, the drawing of the children is limited to the bounds of the parent ViewGroup.

Solution 2 - Java

Two attributes exist that may cause this to happen: clipChildren and clipToPadding. You'll need to set clipChildren to false for each parent ViewGroup whose bounds the object will animate out of. You also need to set clipToPadding to the immediate parent (and maybe more, but I haven't seen a case for it yet).

You can set both attributes in the XML

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

or in code

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

Solution 3 - Java

My implementation. It can probably help somebody:

Java version:

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;
    }
}

call setAllParentsClip(yourView, false); to disable the clipping in all the parents.

Edited:

Kotlin's version as an extension function:

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

Call: yourView.setAllParentsClip(false)

Solution 4 - Java

In my case clipChildren did nothing but clipToPadding="false" fixed the problem. Go figure.

Solution 5 - Java

Get the view height, then add a percentage of the height to where it will slide to

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);
}

Solution 6 - Java

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();

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionErayView Question on Stackoverflow
Solution 1 - JavaJuniKimView Answer on Stackoverflow
Solution 2 - JavaMaxwellView Answer on Stackoverflow
Solution 3 - Javaahmed_khan_89View Answer on Stackoverflow
Solution 4 - JavaOpus1217View Answer on Stackoverflow
Solution 5 - JavaMartin ItotiaView Answer on Stackoverflow
Solution 6 - JavaPrateek YadavView Answer on Stackoverflow