为什么将ViewDragHelper拖动的视图重置为layout()上的原始位置?

Séb*_*ien 12 android android-linearlayout viewdraghelper

我正在游戏中实现自定义可扩展操作栏.我正在使用ViewDragHelper来处理条形视图的拖动和拖动,它包含在LinearLayoutI子类中以附加ViewDragHelper.

以下链接对实现此目的有很大帮助:

  • ViewDragHelper教程:http://flavienlaurent.com/blog/2013/08/28/each-navigation-drawer-hides-a-viewdraghelper/
  • 掌握Android触摸系统:https://www.youtube.com/watch?v = EZAoJU-nUyI (它给了我关键,使视图可点击拖动)

我遇到的唯一问题是我的父LinearLayout 的layout()的行为:在每次调用layout()/时onLayout(),子draggable/expandable操作栏被重置为其原始位置(XML布局中设置的位置).

这是为什么 ?

(根据我的经验,layout()从未对已被移动的观点的位置感到困惑)

use*_*758 11

我正在使用的解决方法是在每次拖动操作后记录视图的偏移量,并重新应用它们onLayout(),例如

View mVdhView;
int mVdhXOffset;
int mVdhYOffset;

@Override
public void computeScroll() {
    if (dragHelper.continueSettling(true)) {
        postInvalidateOnAnimation();
    } else {
        mVdhXOffset = mVdhView.getLeft();
        mVdhYOffset = mVdhView.getTop();
    }
}

@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed, left, top, right, bottom);

      // Reapply VDH offsets
    mVdhView.offsetLeftAndRight(mVdhXOffset);
    mVdhView.offsetTopAndBottom(mVdhYOffset);
}
Run Code Online (Sandbox Code Playgroud)