Android ViewGroup.setScaleX()导致视图被剪裁

时间:2012-09-05 15:31:44

标签: java android zoom scale viewgroup

我使用NineOldAndroids库来扩展我的自定义布局。

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

我尝试过FrameLayout和AbsoluteLayout。都具有相同的效果。 当mScale < 1.0 缩放/缩放工作时,部分布局剪裁

mScale = 1.0:

mScale = 1.0

mScale < 1.0: 缩放/缩放工作但布局剪裁

mScale < 1.0

我该如何解决这个问题?

编辑:图片拍摄于ICS。所以我认为这不是NineOldAndroids的问题。

4 个答案:

答案 0 :(得分:2)

如果有人遇到与我相同的情况。 我最终使用了这种方法:

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

答案 1 :(得分:1)

自API级别11以来,View类具有setScaleX()setScaleY()方法,这些方法按预期工作,并且还缩放了缩放视图的子视图。所以,如果这是一种适合你的方式,请删除库,然后执行

v.setScaleX(mScale);
v.setScaleY(mScale);

答案 2 :(得分:0)

如果我正确理解您的问题,您正在缩放视图组并期望包含的视图相应地缩放。它不起作用:缩放视图组并更改大小,但其子视图不会。

只需缩放所有子视图。即便如此,我也不确定文本和图像是否会自动缩放。你想要的是变焦,而不是缩放。试试this reference

答案 3 :(得分:0)

使用ViewGroup.layout。这可能是缩放(和移动)ViewGroup的最简单方法。