【问题标题】:Drag a PlayN/Tripleplay widget without recalculating layout拖动 PlayN/Tripleplay 小部件而不重新计算布局
【发布时间】:2025-12-23 02:35:11
【问题描述】:

我喜欢 PlayN 框架的 Tripleplay UI 布局,但我是否可以有时禁用布局计算,以便在不触发布局计算的情况下移动内容或更改小部件的文本?

例如,我在AxisLayout 中创建了一个带有单个按钮的简单屏幕,并为该按钮添加了一个监听器:

button.layer.addListener(new Adapter() {
    private float startX;

    @Override
    public void onPointerStart(Event event) {
        startX = event.localX();
    }

    @Override
    public void onPointerDrag(Event event) {
        button.layer.transform().translateX(event.localX() - startX);
    }
});

现在拖动按钮可以左右移动,我很高兴。可以看源码on Github

但是,这段代码有两个问题:

  1. 当我松开鼠标或抬起手指时,按钮会回到起始位置。
  2. 如果我向上拖动鼠标或手指使其离开按钮,按钮将短暂闪回其起始位置,然后继续拖动。如果我在此状态下松开鼠标或在鼠标位于按钮外时抬起手指,则按钮将保持在原位。

似乎正在发生的事情是,每当按钮的状态从按下变为未按下或以其他方式更改时,屏幕的布局都会重新计算,并且按钮会返回到其起始位置。

有没有办法告诉屏幕不要重新计算它的布局?我可以告诉按钮它是有效的吗?

我能想到的唯一策略是将按钮放在轴布局中,计算其位置,然后在移动时将其从轴布局移动到绝对布局。我希望有一个更简单的方法。

【问题讨论】:

    标签: android layout playn tripleplay


    【解决方案1】:

    三重播放元素的想法是它们根据布局、约束、大小等来定位自己。

    如果您希望能够移动它们,则需要使用 AbsoluteLayout

    【讨论】: