我使用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:
缩放/缩放工作但布局剪裁
我该如何解决这个问题?
编辑:图片拍摄于ICS。所以我认为这不是NineOldAndroids的问题。
答案 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的最简单方法。