Search code examples
javaandroidzoomingscaleviewgroup

Android ViewGroup.setScaleX() cause the view to be clipped


I use NineOldAndroids library to scale my custom layout.

public class MyLayout extends FrameLayout {
  // LayoutParams.MATCH_PARENT and all.
  ...
  @Override
  public boolean setPositionAndScale(ViewGroup v, PositionAndScale pas, PointInfo pi) {
    ...
    mScale = pas.getScale();
    ViewHelper.setScaleX(this, mScale);
    ViewHelper.setScaleY(this, mScale);
  }
}

I have tried FrameLayout and AbsoluteLayout. All have the same effect. When mScale < 1.0 scaling/zooming works but part of the layout is clipped.

mScale = 1.0:

mScale = 1.0

mScale < 1.0: scaling/zooming works but layout is clipped

mScale < 1.0

How can i fix this issue?

Edit: The picture was taken on ICS. So I don't think it's NineOldAndroids problem.


Solution

  • In case anyone got in to the same situation as me. I ended up using this approach:

    protected void setScale(float scale, boolean updateView) {
        mScale = scale;
        if (updateView) {
            LayoutParams params = getLayoutParams();
            onUpdateScale(scale, params);
            setLayoutParams(params);
        }
    }
    
    protected void onUpdateScale(float scale, LayoutParams params) {
        params.leftMargin = (int) (mModel.getX() * scale);
        params.topMargin = (int) (mModel.getY() * scale);
        params.width = (int) (mModel.getWidth() * scale);
        params.height = (int) (mModel.getHeight() * scale);
    }