Widok Androida Znikający, Gdy Wychodzisz Poza Rodzica

Mam LinearLayout i ImageView wewnątrz tej LinearLayout.

Istnieje efekt tłumaczenia dla ImageView.

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

Animacja działa, ale znika, gdy ImageView wychodzi poza LinearLayout.

Możesz zobaczyć problem tutaj: http://screenr.com/zoAH

Jak mogę to naprawić bez modyfikowania wysokości LinearLayout.

Author: Eray, 2013-08-05

6 answers

Znajdź grupę ViewGroup, do której należy ImageView i zastosuj ViewGroup.setClipChildren (false) . Domyślnie rysowanie dzieci jest ograniczone do granic nadrzędnej grupy widoków.

 73
Author: JuniKim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-05 01:15:19

Istnieją dwa atrybuty, które mogą to spowodować: clipChildren i clipToPadding. Musisz ustawić clipChildren na false dla każdej nadrzędnej grupy widoków, z której granic obiekt będzie animowany. Musisz również ustawić clipToPadding do bezpośredniego rodzica (i może więcej ,ale nie widziałem jeszcze przypadku).

Można ustawić oba atrybuty w XML

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

Lub w kodzie

viewGroup.setClipChildren(false);
viewGroup.setClipToPadding(false);
 66
Author: Maxwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-13 15:58:38

Moja realizacja. To pewnie może komuś pomóc:

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); aby wyłączyć wycinanie u wszystkich rodziców.

 13
Author: ahmed_khan_89,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-24 16:29:59

W moim przypadku clipChildren nie zrobił nic, ale clipToPadding="false" Naprawiono problem. Pomyśl.

 1
Author: Opus1217,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-11 17:26:56

Uzyskaj wysokość widoku, a następnie dodaj procent wysokości do miejsca, w którym będzie się przesuwać

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);
}
 1
Author: Martin Itotia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 12:17:48
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();
 0
Author: Prateek Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 10:50:41