如果没有放在目标上,则使用 onDraglistener animate 拖放以返回原始位置

Posted

技术标签:

【中文标题】如果没有放在目标上,则使用 onDraglistener animate 拖放以返回原始位置【英文标题】:drag and drop with onDraglistener animate to go back to original position if not dropped on target 【发布时间】:2013-08-01 21:40:32 【问题描述】:

我正在制作一个游戏应用程序,我需要在这里使用onDraglistener 拖放我在实现onDraglistener 的类上所做的事情。

  @Override
public boolean onDrag(View v, DragEvent event) 
    switch (event.getAction()) 
    case DragEvent.ACTION_DRAG_STARTED:
        Log.v("here","drag started");
        //no action necessary
        break;
    case DragEvent.ACTION_DRAG_ENTERED:
        //no action necessary
        Log.v("here","drag enteres");
        break;
    case DragEvent.ACTION_DRAG_LOCATION:
     int mCurX = (int) event.getX();
    int mCurY = (int) event.getY();
    Log.v("Cur(X, Y) : " ,"here ::" + mCurX + ", " + mCurY );
    break;
    case DragEvent.ACTION_DRAG_EXITED:        
        //no action necessary

        Log.v("here","drag exits");
        break;
    case DragEvent.ACTION_DROP:
            .................do what ever when dropped...
     

这是我在 touchlistener 上所做的要拖放的视图:

public boolean onTouch(View view, MotionEvent motionEvent) 
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) 
        /*
         * Drag details: we only need default behavior
         * - clip data could be set to pass data as part of drag
         * - shadow can be tailored
         */
        view.setTag("option"+index);
        ClipData data = ClipData.newPlainText("tag", "option"+index);
        shadowBuilder = new View.DragShadowBuilder(view);

        //start dragging the item touched
        view.startDrag(data, shadowBuilder, view, 0);


        offsetX = (int)view.getX();//(int)motionEvent.getX();
         offsetY = (int)view.getY();//motionEvent.getY();
         Log.v("here","it is ::" + (int)motionEvent.getX() + " , "+(int)motionEvent.getY());

         return false;
 

现在它构建了阴影生成器,可以将其拖动到您拖动手指的任何位置。

我如何为阴影构建器或视图在未放置到目标时返回其位置设置动画?

我尝试public boolean onInterceptTouchEvent(MotionEvent event) 并移动到父视图并获取 x,y 位置并为其设置动画以返回其原始位置,但它被取消了操作。

有什么方法可以让 x,y 坐标到达视图放置在目标之外的位置。然后我就可以在位置之间设置动画了。

【问题讨论】:

试试看:***.com/questions/20741022/… 嘿! @karan,找到解决您问题的方法了吗? @karan421。你找到解决办法了吗? 你好,我在这个帖子里回答了Here in the question of @Beena。 这能回答你的问题吗? get dragged shadow location on View.OnDragListener 【参考方案1】:

你需要处理掉落:

switch (event.getAction()) 
    case DragEvent.ACTION_DRAG_ENTERED:
     //break here was removed in purpose so you can see the shadow and the element is still at its initial place.
    case DragEvent.ACTION_DROP:
            View view = (View) event.getLocalState();
        if (prioritiesList.contains(v)) 

            ViewGroup viewgroup = (ViewGroup) view.getParent();
            viewgroup.removeView(view);

            LinearLayout containView = (LinearLayout) v;
            containView.addView(view);
            view.setVisibility(View.VISIBLE);
                    break;

【讨论】:

以上是关于如果没有放在目标上,则使用 onDraglistener animate 拖放以返回原始位置的主要内容,如果未能解决你的问题,请参考以下文章

宽搜经典题之三——魔板+康托展开

如果没有窗口,则 opencv cv::addText 异常

列表视图拖放在目标上没有可视高亮显示

如果用户尚未登录,则用户登录的弹出窗口

如果字典为空,则可编码问题

如果语句包含没有 INTO 子句的 OUTPUT 子句,则 DML 语句的目标表“RECEIPT”不能有任何启用的触发器