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)
.