Подтвердить что ты не робот

OnDraw() on View рисует за макет

Хорошо, вот сделка. Я хочу переместить элементы в расширенном классе галереи, чтобы изменить порядок изображений. Как я это делаю сейчас:

  • при длинном нажатии удалите текущий выбранный элемент,
  • используйте onDraw(), чтобы нарисовать одно и то же изображение, чтобы я мог перемещать его, используя onTouchEvent()
  • при выпуске снова добавьте элемент

Это работает отлично, но проблема в том, что при использовании метода onDraw() он будет рисовать изображение за элементами галереи. Есть ли способ изменить приоритет того, что нарисовано?

4b9b3361

Ответ 1

Хорошо, я нашел это после перехода в совершенно другое направление =/

Здесь решение для людей, которые имеют одинаковую проблему:

В конструкторе (или где-либо еще вы инициализируете компонент) установите setWillNotDraw(false) и переопределите dispatchDraw(). dispatchDraw() рисует детей ViewGroup, чтобы вы могли сами решить, хотите ли вы рисовать позади или вершины других представлений.

Пример из Пользовательский чертеж поверх представления галереи (и его дочерние представления)

@Override
protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);

    // do your drawing stuff here
    canvas.drawPath(mPath,mPaint);
}