gpt4 book ai didi

android - 在 View.OnDragListener 上获取拖动的阴影位置

转载 作者:行者123 更新时间:2023-11-29 14:46:36 26 4
gpt4 key购买 nike

我在我的应用程序中使用拖放功能。它工作正常。现在我在为 View 设置动画时遇到问题,如果 View 未放置在放置的 View 上,则 View 返回到其原始位置。

我已经通过

创建了我的阴影 View
  View.DragShadowBuilder shadowBuilder = new MyDragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);

我的 shadowbuilder 类是,

private static class MyDragShadowBuilder extends View.DragShadowBuilder {
private static Drawable shadow;

public MyDragShadowBuilder(View v) {
// Stores the View parameter passed to myDragShadowBuilder.
super(v);
v.buildDrawingCache();
shadow = new BitmapDrawable(v.getDrawingCache());
}

@Override
public void onProvideShadowMetrics (Point size, Point touch){
// Defines local variables
int width, height;
width = (int)(getView().getWidth() * 1.1);
height =(int)(getView().getHeight() * 1.1);
shadow.setBounds(0, 0, width, height);
size.set(width, height);
touch.set(width / 2, height / 2);
}

@Override
public void onDrawShadow(Canvas canvas) {
// Draws the ColorDrawable in the Canvas passed in from the system.
shadow.draw(canvas);
}
}

现在,当我发现放置不成功时,我希望我的 View 动画化并返回到它的原始位置。

   case DragEvent.ACTION_DRAG_ENDED:
if (!event.getResult()) {
if (dragged.getTag() == v.getTag()){
int[] location={0,0};
v.getLocationOnScreen(location);
Log.v("values::", "x:" + x + " - y:" +x);
addViewRemoveViewFromWindow(dragged, location);
}
}

break;

我能够在 location 数组中获得 View 的原始位置,即我的结束位置。我想要我在屏幕上的拖动 View (阴影 View )位置。但无论如何我都无法得到它。已尝试在 DragEvent.ACTION_DRAG_LOCATION: 案例中获取它,但没有成功。它总是返回原始 View 位置或删除 View 位置的位置。我想要拖动阴影图像的位置。我想在两个位置之间的窗口中应用翻译动画。当我尝试使用 2 个静态位置时,2 个位置之间窗口中的动画 View 工作正常。

最佳答案

要将您的影子动画化为初始 View ,您可以使用此代码段。

private void animateDragToStart(View initialView, float fromX, float fromY) {
float topMargin = fromY - initialView.getTop();
float leftMargin = fromX - initialView.getLeft();

Animation translateAnimation = new TranslateAnimation(leftMargin - (initialView.getWidth() / 2), 0, topMargin - (initialView.getHeight() / 2), 0);
translateAnimation.setDuration(500);
translateAnimation.setInterpolator(new AccelerateInterpolator());
initialView.startAnimation(translateAnimation);
initialView.setVisibility(View.VISIBLE);
}

在我的例子中,我从 DROP 案例中调用了方法

case DragEvent.ACTION_DROP:
View initialView = (View) event.getLocalState();//get your initial view
initialView.setVisibility(View.VISIBLE);
animateDragToStart(initialView, event.getX(), event.getY());

// Returns true. DragEvent.getResult() will return true.
return true;

创建阴影后,您应该隐藏原始 View 。

View.DragShadowBuilder shadowBuilder = new MyDragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);

这个问题很老,但我回答是因为可以帮助到别人。

关于android - 在 View.OnDragListener 上获取拖动的阴影位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34760518/

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