ViewDragHelper - изменения макета ребенка игнорируются при перетаскивании

Я пытаюсь применить маркерные обновления или анимации к дочернему представлению, родитель которого перетаскивается с помощью ViewDragHelper.

Однако обновленные свойства макета не имеют эффекта и не отображаются во время перетаскивания представления. Все, начиная с добавления и удаления представлений, до анимации макета или обновления паттерна макета, игнорируется при перетаскивании:

Чтобы проиллюстрировать эту проблему, я создал задержанную runnable, которая обновляет высоту представления (зеленый вид) через 3 секунды:

spacer.postDelayed(new Runnable() {
     @Override
     public void run() {
          Log.d(TAG,"set layout params!!!!");
          ViewGroup.LayoutParams spacerParams = spacer.getLayoutParams();
          spacerParams.height = (int) (200+(Math.random()*200));
          spacer.setLayoutParams(spacerParams);
     }
},3000);

Проверьте эту демонстрационную запись: http://imgur.com/a/dDiGt

Ответы

Ответ 1

Android только готов LayoutParams, когда он выполняет макет, который не выполняется при перемещении View. Если вы хотите изменить размер View во время его анимации, вы должны использовать setScale. Если вам действительно нужен View для повторного запуска его макета, вы можете вручную вызвать layout(left, top, right, bottom).