Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 208
Anukool Avatar asked Aug 09 '13 04:08

Anukool


1 Answers

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.

like image 61
Anukool Avatar answered Oct 18 '22 22:10

Anukool