addOnPreDrawListener()在recycleView的item中使用时,即使使用removeOnPreDrawListener(this),但是onPreDraw()还是会被不断调用,阻塞ui线程。
代码语言:javascript复制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宽度的方法:
代码语言:javascript复制approveTextView.post(new Runnable() {
@Override
public void run() {
try {
int nameWidth = nameView.getMeasuredWidth();
} catch (Throwable t) {
t.printStackTrace();
}
}
});