我想将ShadowView
设置为某些坐标(到目标视图)。
我使用D& D并且如果用户放弃(DragEvent.ACTION_DROP
),那么我希望在某些区域中为视图设置视图(从放置位置)到某个目标视图。
我不想从源位置设置动画视图,但想从DROP位置开始。
我尝试了很多东西,但没有任何作用。如何访问ShadowView
?这也行不通:
EventDragShadowBuilder.getView()
我认为TranslateAnimation
应该适用于此,但我需要访问"影子"在D& D期间查看。
答案 0 :(得分:2)
首先在视图上实现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;
}
然后,您可以在使用对象Animation的情况下将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();
}
答案 1 :(得分:0)
一件可能的事情可能是
一旦拖动事件结束,您可以将“视图”移动到放置的位置,然后您可以启动动画以将视图从放置的位置移动到目标。
请记住,拖动阴影没有动画,但视图本身正在动画化。
答案 2 :(得分:0)
作为一种解决方法,您可以尝试添加具有透明和黑色渐变drawable的选择器,具体取决于适当的状态。在这种情况下,你将决定,当你的"阴影"应该显示,什么时候应该消失。
这是一个关于" shadow"的问题。有边界的布局: Android LinearLayout : Add border with shadow around a linearLayout
不确定,这是一个好方法......但它可能会奏效。 祝你好运!
答案 3 :(得分:0)
为要拖动的视图创建一个重复视图。拖动结束后,您将获得视图的位置或放下坐标。一旦发生这种情况,请将“真实”视图的可见性设置为View.INVISIBLE。然后将不可见的临时视图的x和y设置为下降点的x和y,使其可见。之后,创建一个将临时视图动画化到所需位置的转换动画,并且不要忘记将转换动画的setFillEnabled和setFillAfter属性设置为true。