videowindowtype videowindowtype = new videowindowtype();
videowindowtype.x = 106;
videowindowtype.y = 210;
videowindowtype.width = 660;
videowindowtype.height = 340;
後來改了一種實現,直接獲取布局檔案中用於顯示控制項的位置以及控制項的寬高:
panelproperty temppanelsize;
temppanelsize = tvmanager.getinstance().getpicturemanager()
.getpanelwidthheight();
.getdisplaymetrics().widthpixels;
.getdisplaymetrics().heightpixels;
float zoomratio = ((float) temppanelsize.width / (float) osdwidth);
videowindowtype videowindowtype = new videowindowtype();
int location = new int[2];
tv_su***ceview_layout.getlocationonscreen(location);
videowindowtype.x = (int) (location[0] * zoomratio);
videowindowtype.y = (int) (location[1] * zoomratio);
videowindowtype.width = (int) (tv_su***ceview_layout.getwidth() * zoomratio) - 2;
videowindowtype.height = (int) (tv_su***ceview_layout.getheight() * zoomratio) - 2;
本來以為會萬事大吉正常顯示,哪知道在介面上根本就沒有顯示出來,檢視列印訊息才知道location[0],
location[1],getwidth、getheight等都為0。一下就懵了。。。。。。
經過分析才知道在ui元件還沒有顯示在介面之前呼叫getwidth、getheight、getx、gety等通常都是為0。不要在oncreate、onstart、onresume中去得到控制項的getwidth、
getheight、getx、gety等資訊。
然後在網上找到了大神們的解決方式:
在onresume中新增:
getwindow().getdecorview().post(new runnable()
});
其中scalehandler和
scalerunnable的定義為:
private handler scalehandler = new handler();
private runnable scalerunnable = new runnable()
};
修改以後,就可以成功獲取x,y,寬高等資訊。
同時,也可以用這種方法來進行延遲載入。
具體的解析看部落格:
無限崇拜大神中~
android 獲取控制項在螢幕中位置
專案需要在ui中獲取其中乙個控制項的位置,在oncreate中直接獲取發現引數全為零,獲取失敗。網上查詢知道原來需要等到整個換麵載入完才可以獲取到位置資訊。特來記錄下以備以後查詢 獲取空間螢幕位置 rect rect new rect int location new int 2 mplaysu c...
android設定控制項的位置以及獲取控制項的座標
專案中遇到乙個問題,就是印表機打字的效果,然後找到了一位大神的輪子。android實用view系列 textview實現印表機效果 這樣確實實現了印表機打字的效果,但是又出現乙個問題。這個印表機的自定義view事先不能確定整體的高度,這樣,印表機每列印一行,高度就會變大一行,那麼在linear la...
Android 獲取控制項的寬高和位置
獲取控制項的絕對位置 包括狀態列 可以用這種方法,呼叫方法後,location 0 和location 1 就分別被賦值了。int location new int 2 view.getlocationonscreen location 獲取控制項的相對與當前視窗的位置可以用getlocationi...