1
Я хочу создать перетаскиваемый вид, который можно перетаскивать только на оси Y. Обычно я хотел бы использовать DragShadow
и будет делать что-то вроде этого:Как перетащить вид ТОЛЬКО на ось y?
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN: {
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(null, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
} break;
return true;
}
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
View sourceView = (View) dragEvent.getLocalState();
float sourceX = sourceView.getX();
float sourceY = sourceView.getY();
float dropX = dragEvent.getX() - (sourceView.getWidth()/2);
float dropY = dragEvent.getY() - (sourceView.getHeight()/2);
switch(dragEvent.getAction()) {
case DragEvent.ACTION_DRAG_EXITED : {
TranslateAnimation animation = new TranslateAnimation(dropX - sourceX, 0, dropY - sourceY, 0);
animation.setDuration(300);
sourceView.startAnimation(animation);
sourceView.setX(sourceX);
sourceView.setY(sourceY);
sourceView.setVisibility(View.VISIBLE);
} break;
case DragEvent.ACTION_DROP : {
sourceView.setX(dropX);
sourceView.setY(dropY);
sourceView.setVisibility(View.VISIBLE);
// TranslateAnimation animation = new TranslateAnimation(dropX - sourceX, 0, dropY - sourceY, 0);
// animation.setDuration(300);
// sourceView.startAnimation(animation);
// sourceView.setX(sourceX);
// sourceView.setY(sourceY);
} break;
}
}
Проблема заключается в том, что я не хочу, чтобы View
или DragShadow
быть dragable на оси X. Положение X всегда должно оставаться неизменным, разрешается изменять только Y-ось.
Как я могу это сделать?