Search code examples
androidpivotandroid-animationscaleanimation

Android - ObjectAnimator set pivot value


I want a relative layout to scale up and the bottom of the view should be fixed.
I have a relative layout -

private RelativeLayout rlOutdoorSection;

Initialized it -

rlOutdoorSection = (RelativeLayout) findViewById(R.id.rlOutdoorSection);

Created an ObjectAnimator -

scaleUpOutdoor = ObjectAnimator.ofFloat(rlOutdoorSection, "scaleY", 1f,
            2.6f);
    scaleUpOutdoor.setDuration(3000);

start the Animation -

scaleDownOutdoor.start();

At present the view is getting scaled with pivot values at the center of the view.

How can i ensure the view is scaled with the bottom of the view fixed?

Thanks in Advance.


Solution

  • First we have to calculate the HEIGHT of the view -

    iOutdoorCompressedHeight = rlOutdoorSection.getMeasuredHeight();
    

    Use this height as the pivot around which the view has to be scaled.

    rlOutdoorSection.setPivotX(0f);
    rlOutdoorSection.setPivotY(iOutdoorCompressedHeight);
    

    The trick here can be getting the measured height of the view.
    In an Activity calculate the height in

    @Override
    public void onWindowFocusChanged(boolean hasFocus)
    {
        super.onWindowFocusChanged(hasFocus);
        // Here calculate the height / width
    }
    

    In a FRAGMENT use global layout listener-

    rlOutdoorSection = (RelativeLayout) vMain
                .findViewById(R.id.rlOutdoorSection);
        ViewTreeObserver vtoOutdoor = rlIndoorSection.getViewTreeObserver();
        vtoOutdoor.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    
            @Override
            public void onGlobalLayout() {
                iOutdoorCompressedHeight = rlOutdoorSection.getMeasuredHeight();
                rlOutdoorSection.setPivotX(0f);
                rlOutdoorSection.setPivotY(iOutdoorCompressedHeight);
    
            }
        });
    

    Hope this will help some one.