我使用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的问题.
解决方法:
视图的父级必须具有属性androID:clipChildren Disabled(来自布局文件或使用setClipChildren(false)).
但是使用此方法,您不会在视图剪辑边界之外获得触摸事件.您可以通过从活动中发送它们或编写自定义viewGroup父级来解决此问题.
我正在使用一个不同的黑客,这似乎适用于我的情况,诀窍是维护自己的转换矩阵.然后,你必须重载很多VIEwGroup的方法才能使它工作.例如 :
@OverrIDeprotected 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;}
总结 以上是内存溢出为你收集整理的java – Android ViewGroup.setScaleX()导致视图被剪裁全部内容,希望文章能够帮你解决java – Android ViewGroup.setScaleX()导致视图被剪裁所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)