I use 九老机器人库来缩放我的自定义布局。
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
缩放/缩放工作但布局的一部分是clipped.
mScale = 1.0:
mScale < 1.0:
scaling/zooming works but layout is clipped
我该如何解决这个问题?
Edit:照片是在ICS上拍摄的。所以我不认为这是 NineOldAndroids 的问题。
您视图的父级必须拥有该属性android:clipChildren
禁用(从布局文件或使用setClipChildren(false)
).
但使用这种方法,您不会在视图剪辑边界之外获得触摸事件。您可以通过从您的活动发送它们或编写自定义ViewGroup
parent.
我正在使用一种不同的黑客,这似乎适用于我的情况,技巧是维护你自己的转换矩阵。然后,你必须超载很多ViewGroup
的方法使其发挥作用。例如 :
@Override
protected void dispatchDraw(Canvas canvas) {
Log.d(TAG, "dispatchDraw " + canvas);
canvas.save();
canvas.concat(mMatrix);
super.dispatchDraw(canvas);
canvas.restore();
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d(TAG, "dispatchTouchEvent " + ev);
ev.transform(getInvMatrix()); //
return super.dispatchTouchEvent(ev);
}
private Matrix getInvMatrix()
{
if(!mTmpMatIsInvMat)
mMatrix.invert(mTmpMat);
mTmpMatIsInvMat = true;
return mTmpMat;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)