如何将拖动的对象与拖动原点对齐?

问题描述 投票:-1回答:1

我有一个内部有五个视图的LinearLayout,它们形成一个1x5网格。

将拖动此LinearLayout。

我目前正在五个视图中的每个视图上设置onTouchListeners,检查拖动来自五个中的哪一个,并在LinearLayout上调用motionEvent.getAction()。

这是不完美的,因为LinearLayout被它的中心拖动而不是拖动开始点。

有没有办法在motionEvent的开头变换LinearLayout,以便在拖动的同时拖动源的视图是在手指下?

在LinearLayout内的五个视图中的每一个上设置的MyTouchListener

    private final class MyTouchListener implements View.OnTouchListener {
    //public boolean onTouch(View view, MotionEvent motionEvent) {
    public boolean onTouch(View view, MotionEvent motionEvent) {
        LinearLayout ship = (LinearLayout)view.getParent();
        dragCellIndex = ship.indexOfChild(view);
        dragCellTotal = ship.getChildCount();
        view = ship;

        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {            
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);
            view.setVisibility(View.INVISIBLE);
            return true;
        } else {
            return false;
        }
    }
}
android android-layout android-animation
1个回答
1
投票

要做到这一点,你想做一些数学计算。从motionEvent中检索手指触摸/拖动点X和Y坐标,使用LinearLayout左上角的X和Y坐标计算它们之间的差异,并将它们保存在2个变量中。

这样,当您拖动LinearLayout时,只需将这些变量添加到X和Y坐标,并将LinearLayout移动到该点。我希望你有这个主意。

我在开发纸牌游戏时使用过这种方法,就像魅力一样。

© www.soinside.com 2019 - 2024. All rights reserved.