addOnPreDrawListener()在recycleView的item中使用時,即使使用removeOnPreDrawListener(this),但是onPreDraw()還是會被不斷調用,阻塞ui線程。
approveTextView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if(isFirst) {
try {
if(approveTextView.getViewTreeObserver().isAlive()) {
approveTextView.getViewTreeObserver().removeOnPreDrawListener(this);
isFirst = false;
}
int nameWidth = nameView.getMeasuredWidth();
...
}catch (Throwable t){
t.printStackTrace();
}
}
return true;
}
});
解決辦法一:
加isFirst進行判斷,如上;
解決辦法二:
換用其他得到view寬度的方法:
approveTextView.post(new Runnable() {
@Override
public void run() {
try {
int nameWidth = nameView.getMeasuredWidth();
} catch (Throwable t) {
t.printStackTrace();
}
}
});