Когда я пишу пользовательское представление, добавляю ViewTreeObserver.onGlobalLayoutListener к нему, однако я дважды обращаюсь к вызову слушателя, и значение метода aruments меняется
public void setClassStatus(final ClassStatus s) {
Log.d("lijiwei321", "setClassStatus execute,input s:"+s);
setClassStatusFlag = true;
QualificationsSeekBarView.this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Log.d("lijiwei321", "currentThread:"+Thread.currentThread().getName()+"callback s:"+s);
if (setClassStatusFlag) {
int availableWidth = getMeasuredWidth() - getPaddingRight() - getPaddingLeft();
Log.d("availableWidth", "availableWidth:" + availableWidth);
if (s == ClassStatus.Eager) {
currentX = Math.round((shortLineLength - (radius1 - radius0)) / sumLength * availableWidth);
} else if (s == ClassStatus.Refine) {
currentX = Math.round((shortLineLength + radius0 + radius0 + commonLineLength - (radius1 - radius0)) / sumLength * availableWidth);
} else if (s == ClassStatus.TravelFar) {
currentX = Math.round((shortLineLength + radius0 + radius0 + commonLineLength
+ radius0 + radius0 + commonLineLength - (radius1 - radius0)) / sumLength * availableWidth);
} else {
currentX = Math.round((shortLineLength + radius0 + radius0 + commonLineLength
+ radius0 + radius0 + commonLineLength + radius0 + commonLineLength + radius0 - (radius1 - radius0)) / sumLength * availableWidth);
}
invalidate();
setClassStatusFlag = false;
}
}
});
}
Журналы:
введите описание изображения здесь