How can I get my ImageButton to drag with a LongClickListener instead of an OnTouchListener? I need the button to perform an Action OnClick and when I click it, it thinks I'm starting a drag.
I tried some StackoverFlow answers and nothing has worked.
So, this is my code to start the drag:
homeView.setOnDragListener(new IconDragListener());
ll.setOnTouchListener(new MyTouchListener());
...
class IconDragListener implements View.OnDragListener{
@Override
public boolean onDrag(View v, DragEvent event) {
GridLayout gridLayout = (GridLayout) v.findViewById(R.id.middleGrid);
final int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
// do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
//On drag entered
case DragEvent.ACTION_DROP:
if (event.getAction()==DragEvent.ACTION_DROP) {
View view = (View) event.getLocalState();
ViewGroup from = (ViewGroup) view.getParent();
from.removeView(view);
GridLayout to = (GridLayout) v;
to.addView(view);
view.setVisibility(View.VISIBLE);
//deleteAreaForAdapter.setVisibility(View.INVISIBLE);
deleteAreaForAdapter.setAnimation(slide_out);
}
return true;
case DragEvent.ACTION_DRAG_ENDED:
//do nothing
default:
break;
}
return true;
}
...
// Touch Listener, I'd like this to be OnLongClick
private final class MyTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_DOWN) {
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(null, shadowBuilder, v, 0);
deleteAreaForAdapter.setVisibility(View.VISIBLE);
deleteAreaForAdapter.startAnimation(slide_in);
v.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
}
Thanks!
Put you code in setOnLongClickListener
of ImageButton
ImageButton.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(null, shadowBuilder, v, 0);
deleteAreaForAdapter.setVisibility(View.VISIBLE);
deleteAreaForAdapter.startAnimation(slide_in);
v.setVisibility(View.INVISIBLE);
return true;
}
});