Каждый раз, когда представлению (включая ViewGroups) необходимо отрисовать себя, вызывается метод onMeasure, чтобы получить его размеры. После этого вызывается onLayout, чтобы получить позицию, где будет рисоваться. Этого не происходит в методах рисования, поскольку они вызываются после onMeasure и onLayout, см. здесь. Подводя итог, onMeasure вычисляет размеры, onLayout устанавливает позиции и, наконец, onDraw выполняет рендеринг. Поэтому лучше всего использовать onMeasure для установки желаемых размеров. Например, это метод onMeasure, который сообщает дочернему представлению, что его размеры должны быть ровно 300 x 150 пикселей:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSpec;
int heightSpec;
widthSpec = MeasureSpec.makeMeasureSpec(300, MeasureSpec.EXACTLY);
heightSpec = MeasureSpec.makeMeasureSpec(150, MeasureSpec.EXACTLY);
llTopBar.measure(widthSpec, heightSpec); //<-- llTopBar is the child...
super.onMeasure(widthMeasureSpec, heightMeasureSpec); //<--This is important
}
Если вы хотите использовать провалы вместо пикселей, вам нужно преобразовать их, см. здесь< /а>.
Вы можете измерить дочерние элементы с размерами, превышающими доступное пространство, но результаты могут быть не такими, как вы ожидаете, из-за отсечения или других факторов (например, если ваша ViewGroup находится в другой ViewGroup).
Из вашего вопроса я вижу, что вы создаете что-то, что скользит слева направо, возможно, исходный код раздвижного ящика будет полезен, посмотрите здесь.
Надеюсь это поможет...
person
ChD Computers
schedule
08.07.2013