Android编程之如何取得View的当前位置

Android编程之如何取得View的当前位置,第1张

你好,很高兴为你解答

给要添加的view中设置viewsetTag(index); index就是viewGroup的子view的个数,这样通过getTag()就能获取到index了

~如果你认可我的回答,请及时点击采纳为满意回答按钮

~~手机提问的朋友在客户端右上角评价点满意即可。

~你的采纳是我前进的动力

~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。

在Android开发过程中,有时需要获取View绘制前的高度或者宽度,一种的可能情形是初始化的时候让某个View的Visible = Gone的,当触发某个事件的时候需要它显示并且希望有一些动画效果。

这时候就要获取这个View显示前即绘制前的宽度或者高度。原理很简单,View的绘制过程发生之前,会先执行onMeasure方法。那么就可以利用反射来获取需要的值。下面给出获取高度的代码,宽度同理。

private int getTargetHeight(View v) {

try {

Method m = vgetClass()getDeclaredMethod("onMeasure", intclass,

intclass);

msetAccessible(true);

minvoke(v, MeasureSpecmakeMeasureSpec(

((View) vgetParent())getMeasuredWidth(),

MeasureSpecAT_MOST), MeasureSpecmakeMeasureSpec(0,

MeasureSpecUNSPECIFIED));

} catch (Exception e) {

}

return vgetMeasuredHeight();

}

拿到这个高度之后就可以做想做的动画效果或者是其他的事情了。

 android事件分发机制 就是一个触摸事件发生了,从一个窗口传递到一个视图,再传递到另外一个视图,最后被消费的过程,在android中还是比较复杂的传递流程如下:

(1) 事件从ActivitydispatchTouchEvent()开始传递,只要没有被停止或拦截,从最上层的View(ViewGroup)开始一直往下(子View)传递。子View可以通过onTouchEvent()对事件进行处理。

(2) 事件由父View(ViewGroup)传递给子View,ViewGroup可以通过onInterceptTouchEvent()对事件做拦截,停止其往下传递。

先定位到相应的页卡,比如你有3个页卡分别是View1,View2,View3。

那么你要走在View1中添加就这样写

RelativeLayout insertLayout = (RelativeLayout)View1findViewById(Ridscreen)

View2中就是

RelativeLayout insertLayout = (RelativeLayout)View2findViewById(Ridscreen)

以此类推

你在写Listview的adapter的getview返回的应该是一个包括一张ImageView和一个ProgressBar,的ViewGroup,不管你是用LinearLayout还是其他的layout,总之是个ViewGroup;

你在另个一Activity中,取到ListView里面的View,实际上就是个ViewGroup,可以把这个view强转成ViewGroup对象,再通过getChildAt(0),getChildAt(1),分别取得的子view就是ImageView和ProgressBar。

以上就是关于Android编程之如何取得View的当前位置全部的内容,包括:Android编程之如何取得View的当前位置、android view怎么获取高度、android 如何获取一个界面最顶层的view并处理单击事件的分发机制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9486932.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存