Android - 拖放 - 动画阴影到目的地
Posted
技术标签:
【中文标题】Android - 拖放 - 动画阴影到目的地【英文标题】:Android - Drag and Drop - Animation shadow to destination 【发布时间】:2017-02-21 06:56:10 【问题描述】:我想将ShadowView
动画到某个坐标(到目标视图)。
我正在使用 D&D,如果用户掉落 (DragEvent.ACTION_DROP
),那么我想将某个区域的视图(从放置位置)动画化到某个目标视图。
我不想从源位置为视图设置动画,但想从 DROP 位置进行。
我尝试了很多东西,但没有任何效果。如何访问ShadowView
?这也不起作用:
EventDragShadowBuilder.getView()
我认为TranslateAnimation
应该可以解决这个问题,但我需要在 D&D 期间访问“影子”视图。
图片:
【问题讨论】:
我认为您无法访问 ShadowView。如果您可以获取放置的位置,您可以自己创建一个与 ShadowView 具有相同背景的重复视图,并将此重复视图动画到目的地,从而产生 ShdowView 本身正在移动的错觉。 【参考方案1】:首先在视图上实现onTouchlistener
llDragable.setOnTouchListener(this);
使视图可拖动
@Override
public boolean onTouch(View view, MotionEvent event)
float dX = 0;
float dY = 0;
switch (view.getId())
case R.id.dragableLayout :
switch (event.getActionMasked())
case MotionEvent.ACTION_DOWN:
dX = view.getX() - event.getRawX();
dY = view.getY() - event.getRawY();
lastAction = MotionEvent.ACTION_DOWN;
break;
case MotionEvent.ACTION_MOVE:
view.setY(event.getRawY() + dY);
view.setX(event.getRawX() + dX);
lastAction = MotionEvent.ACTION_MOVE;
break;
case MotionEvent.ACTION_UP:
//Animate
animate();
if (lastAction == MotionEvent.ACTION_DOWN)
//Toast.makeText(DraggableView.this, "Clicked!", Toast.LENGTH_SHORT).show();
break;
default:
return false;
return true;
return false;
然后您可以在案例 MotionEvent.ACTION_UP 中使用对象动画师使用对象动画。你需要有目的地的位置。
private void animate()
Path path = new Path();
path.moveTo(destinationX, destinationY);
path.lineTo(destinationX, destinationY);
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mButton, View.X, View.Y, path);
objectAnimator.setDuration(duration);
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.start();
【讨论】:
【参考方案2】:一种可能的情况是
拖动事件完成后,您可以将“视图”移动到放置位置,然后您可以启动动画将视图从放置位置移动到目标位置。
请记住,这里的拖动阴影不是动画,而是视图本身正在动画。
【讨论】:
【参考方案3】:作为一种解决方法,您可以尝试添加一个具有透明和黑色渐变可绘制对象的选择器,具体取决于适当的状态。在这种情况下,您将决定何时显示“影子”以及何时消失。
这是一个关于“阴影”边框布局的问题: android LinearLayout : Add border with shadow around a linearLayout
不确定,这是不是一个好方法……但它可能会奏效。 祝你好运!
【讨论】:
【参考方案4】:为您拖动的视图创建一个重复视图。拖动结束后,您将获得视图的位置或放下坐标。一旦发生这种情况,请将“真实”视图的可见性设置为 View.INVISIBLE。然后将临时不可见视图的 x 和 y 设置为下车点的 x 和 y 并使其可见。之后,创建一个平移动画,将临时视图动画到所需位置,不要忘记将平移动画的 setFillEnabled 和 setFillAfter 属性设置为 true。
【讨论】:
以上是关于Android - 拖放 - 动画阴影到目的地的主要内容,如果未能解决你的问题,请参考以下文章
Android中实现popupwindow(全屏+阴影+动画)
Android 拖动阴影的“目标点”如何从其“接触点”移开?