android– 强制重新布局视图组,包括其所有子项

android– 强制重新布局视图组,包括其所有子项,第1张

概述我正在编写一个可以放大的自定义布局(扩展FrameLayout).它的所有子节点也是自定义视图,它实际上通过getter方法从父节点获取比例因子,并通过设置缩放尺寸来相应缩放protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(w

我正在编写一个可以放大的自定义布局(扩展FrameLayout).它的所有子节点也是自定义视图,它实际上通过getter方法从父节点获取比例因子,并通过设置缩放尺寸来相应缩放

protected voID onMeasure(int wIDthMeasureSpec,int heightmeasureSpec) {    super.onMeasure(wIDthMeasureSpec,heightmeasureSpec);    float scaleFactor = ((CustomLayout) getParent()).getCurrentScale();    setMeasuredDimension((int) (getMeasureDWIDth() * scaleFactor),(int) (getMeasuredHeight() * scaleFactor));}

我正在使用ScaleGestureDetector来检测“缩放到缩放”手势并更改布局的scaleFactor.然后我通过调用requestLayout强制自定义布局上的布局.不幸的是,这似乎对其孩子没有任何影响.孩子们的onMeasure& onLayout永远不会被调用,即使父母经历了它的措施&布局周期.但是,如果我直接在其中一个孩子上调用requestLayout,那么只要该孩子根据父母中设置的比例因子进行缩放!

似乎除非在视图上专门调用requestLayout,否则它实际上不会再次测量自身,而是使用某种缓存.从视图的源代码中可以看出这一点

if (mAttachInfo != null && mAttachInfo.mVIEwRequestingLayout == null) {        // Only trigger request-during-layout logic if this is the vIEw requesting it,// not the vIEws in its parent hIErarchy        VIEwRootImpl vIEwRoot = getVIEwRootImpl();        if (vIEwRoot != null && vIEwRoot.isInLayout()) {            if (!vIEwRoot.requestLayoutDuringLayout(this)) {                return;            }        }        mAttachInfo.mVIEwRequestingLayout = this;    }

我如何强迫孩子们在他们的父母上调用requestLayout时再次测量自己?最佳答案这将强制重新布局视图的子节点(假设视图自身的宽度和高度不需要更改)

private static voID relayoutChildren(VIEw vIEw) {    vIEw.measure(        VIEw.MeasureSpec.makeMeasureSpec(vIEw.getMeasureDWIDth(),VIEw.MeasureSpec.EXACTLY),VIEw.MeasureSpec.makeMeasureSpec(vIEw.getMeasuredHeight(),VIEw.MeasureSpec.EXACTLY));    vIEw.layout(vIEw.getleft(),vIEw.gettop(),vIEw.getRight(),vIEw.getBottom());}
总结

以上是内存溢出为你收集整理的android – 强制重新布局视图组,包括其所有子项全部内容,希望文章能够帮你解决android – 强制重新布局视图组,包括其所有子项所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1140549.html

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

发表评论

登录后才能评论

评论列表(0条)

保存