Android中獲取控制項的位置寬高等資訊都為0

2021-07-11 03:41:04 字數 1678 閱讀 3226

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...