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

java–Android ViewGroup.setScaleX()导致视图被剪裁,第1张

概述我使用NineOldAndroids库来扩展我的自定义布局.publicclassMyLayoutextendsFrameLayout{//LayoutParams.MATCH_PARENTandall....@OverridepublicbooleansetPositionAndScale(ViewGroupv,PositionAndScalepas,PointInfopi){...mScale=pas

我使用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()导致视图被剪裁所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1097908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存