gpt4 book ai didi

android - 使用 onDraglistener 动画拖放以返回原始位置(如果未放在目标上)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:42 30 4
gpt4 key购买 nike

我正在制作一个游戏应用程序,我需要在其中使用 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...
}

这是我在要拖放的 View 的 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;
}

现在它构建了阴影生成器,它可以拖动到您用手指拖动的任何地方。

我如何让阴影生成器或 View 在未放置到目标时返回到其位置的动画?

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

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

最佳答案

你需要处理掉落:

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;
}

关于android - 使用 onDraglistener 动画拖放以返回原始位置(如果未放在目标上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17986044/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com