如何android 取得屏幕宽度一个 View 在屏幕中上的 Rect

我有两个view(View1和View2),我想在View2里的按钮点击事件中调用View1的OnDraw,可是这个OnDraw需要一个CDC的输入参数。我随便Get一个倒是可以调用,但是在View1的OnDraw中获取CRect就中断,怎么回事?上代码
ViewCenter&
CDC&*m_pDC;
m_pDC=GetDC();
center.OnDraw(m_pDC);
View1的OnDraw中是
GetClientRect(rectClient);
TRACE(&onDraw\n&);
如果去掉CRect这事,点击几下就输出几条“OnDraw”,正常,但是一加上Rect就中断。我因为要在View2中点击重绘View1,所以还必须解决这个问题。
回复讨论(解决方案)
中断的时候查看一下调用栈,看下为什么中断。
我有两个view(View1和View2),我想在View2里的按钮点击事件中调用View1的OnDraw,可是这个OnDraw需要一个CDC的输入参数。我随便Get一个倒是可以调用,但是在View1的OnDraw中获取CRect就中断,怎么回事?上代码
ViewCenter&
CDC&*m_pDC;
m_pDC=GetDC();
center.OnDraw(m_pDC);
View1的OnDraw中是
GetClientRect(rectClient);
TRACE(&onDraw\n&);
如果去掉CRect这事,点击几下就输出几条“OnDraw”,正常,但是一加上Rect就中断。我因为要在View2中点击重绘View1,所以还必须解决这个问题。
代码逻辑混乱,View2的DC传给View1去绘制!OnDraw不要人为去调用,那是触发WM_PAINT消息时系统调用的。
所以,你在View2中发消息给View1通知它刷新不就是的,Invalidate\InvalidateRect,不要调用OnDraw也就不存在传参的问题了。
我有两个view(View1和View2),我想在View2里的按钮点击事件中调用View1的OnDraw,可是这个OnDraw需要一个CDC的输入参数。我随便Get一个倒是可以调用,但是在View1的OnDraw中获取CRect就中断,怎么回事?上代码
ViewCenter&
CDC&*m_pDC;
m_pDC=GetDC();
center.OnDraw(m_pDC);
View1的OnDraw中是
GetClientRect(rectClient);
TRACE(&onDraw\n&);
如果去掉CRect这事,点击几下就输出几条“OnDraw”,正常,但是一加上Rect就中断。我因为要在View2中点击重绘View1,所以还必须解决这个问题。
代码逻辑混乱,View2的DC传给View1去绘制!OnDraw不要人为去调用,那是触发WM_PAINT消息时系统调用的。
所以,你在View2中发消息给View1通知它刷新不就是的,Invalidate\InvalidateRect,不要调用OnDraw也就不存在传参的问题了。
我要画两个东西,希望view自动生成的时候画一个,点击按钮时再画两一个
每个View对应一个自己的DC,你硬要它用别人DC当然不行,但你可以通过消息和内存方式将内容进行交换。
不要直接调用OnDraw
代之调用View1的Invalidate函数
利用View指针调用,调用Invalidate/InvalidateRect()即可。
如pView-&Invalidate/InvalidateRect();
楼上说的都对,哥帮你总结一下:
自定义消息映射。当在view2中需要调用view1中函数时,采用SendMessage()的方法通知view1重绘,即给view1窗口发消息;
在view1和view2中分别添加一个静态成员变量:
static&CView1*&pCView1;
static&CView2*&pCView2;
然后在OnInitialUpdate()函数中对其赋值:
pCView1=&(CView1*)FromHandle(GetSafeHwnd());
pCView2=&(CView2*)FromHandle(GetSafeHwnd());
最后,行了,随便用:
CView1::pCView1-&Invalidate();
CView2::pCView2-&Invalidate();Android 获取view在屏幕中的位置 - 邓春光 - 博客园
getLocalVisibleRect&, 返回一个填充的Rect对象, 感觉是这个View的Rect大小,left,top取到的都是0getGlobalVisibleRect&, 获取全局坐标系的一个视图区域, 返回一个填充的Rect对象;该Rect是基于总整个屏幕的getLocationOnScreen&,计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标&getLocationInWindow&,计算该视图在它所在的widnow的坐标x,y值,//获取在整个窗口内的绝对坐标 (不是很理解= =、)getLeft&,&getTop,&getBottom,&getRight,&&这一组是获取相对在它父亲里的坐标**注**:如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些example:&int[] location = new int[2];& & v.getLocationOnScreen(location);& & int x = location[0];& & int y = location[1];获取屏幕状态栏与标题栏高度_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
获取屏幕状态栏与标题栏高度
上传于||文档简介
&&a​n​d​r​o​i​d
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
你可能喜欢主题 : 在拖动view时,如何判断一个对象被拖到了可见的view区域中?
级别: 骑士
可可豆: 1183 CB
威望: 1184 点
在线时间: 168(时)
发自: Web Page
在拖动view时,如何判断一个对象被拖到了可见的view区域中?&&&
希望实现一个效果,就是当上下拖动view时,当某个元素进入到当前可见的view中?也就是说,当用户开始看到这个对象时,如何进行判断?找到了如下代码,据说可以用作判断,但是不知道怎么用- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view还查到一个方法如下:&&&&CGRect rc = [self.view convertRect:reviewBtn.frame fromView:reviewBtn.superview.superview];放在viewDidLoad中,确实可以返回一个值。但是,值只能得到一次,怎样能在拖动scrollview过程中,实时获得值呢?[ 此帖被dingdongdong123在 20:41重新编辑 ]
级别: 新手上路
可可豆: 3 CB
威望: 3 点
在线时间: 5(时)
发自: Web Page
试试看&&“某个元素”.view.window 属性 ?
级别: 骑士
可可豆: 1183 CB
威望: 1184 点
在线时间: 168(时)
发自: Web Page
回 1楼(fogisland) 的帖子
感谢回复。不是很理解啊。
级别: 新手上路
可可豆: 3 CB
威望: 3 点
在线时间: 5(时)
发自: Web Page
回 2楼(dingdongdong123) 的帖子
就是对于你想要检查的目标view, 查看其window属性,如果不为nil ,说明不在屏幕上。但是不一定正确哦,我只是记得有这么个东西,要试试才知道。
级别: 精灵王
可可豆: 1070 CB
威望: 1171 点
在线时间: 1002(时)
发自: Web Page
把这个方法放进scroll的滚动方法里面就可以很呆的解决这个问题
级别: 新手上路
UID: 262256
可可豆: 53 CB
威望: 28 点
在线时间: 158(时)
发自: Web Page
没明白怎么回事
关注本帖(如果有新回复会站内信通知您)
9*6-8 正确答案:46
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 如何取得view的名字 的文章

 

随机推荐