In draggable gridlayout cells of the GridLayout(consist rows and columns) can be draged from one position to another by using OnDragListener.
![](http://findnerd.s3.amazonaws.com/imagedata/10028/10028.png)
To use GridLayout, first add gridlayout to project gradle (app level) and follow below steps to add GridLayout:-
1. go to File->ProjectStructure->app->Dependencies->+->Library dependency
2. Search for gridLayout and press OK
3. On Item touch listener of GridLayout Item, GridLayout.setOnDragListener(new DragListener(thumbnailId)) is call to initiate OnDragListener.
class DragListener implements View.OnDragListener {
public ArrayList<ImageModel> imagesList;
public DragListener(ArrayList<ImageModel> imagesList) {
this.imagesList = imagesList;
}
@Override
public boolean onDrag(View v, DragEvent event) {
final View view = (View) event.getLocalState();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_LOCATION:
if (view == v) return true;
index = calculateNewIndex(event.getX(), event.getY());
if (!checked) {
startIndex = index;
checked = true;
}
final Rect rect = new Rect();
mScrollView.getHitRect(rect);
final int scrollY = mScrollView.getScrollY();
if (event.getY() - scrollY > mScrollView.getBottom() - 250) {
startScrolling(scrollY, mGrid.getHeight());
} else if (event.getY() - scrollY < mScrollView.getTop() + 250) {
startScrolling(scrollY, 0);
} else {
stopScrolling();
}
// remove the view from the old position
try {
mGrid.removeView(view);
// and push to the new
mGrid.addView(view, index);
} catch (Exception e) {
e.printStackTrace();
}
break;
case DragEvent.ACTION_DRAG_ENDED:
if (!event.getResult()) {
view.setVisibility(View.VISIBLE);
}
view.setVisibility(View.VISIBLE);
checked = false;
int lastIndex = index;
if (startIndex > lastIndex) {
imagesList.add(lastIndex, imagesList.get(startIndex));
imagesList.remove(startIndex + 1);
mGrid.removeAllViews();
setThumbnail(imagesList);
} else if (startIndex < lastIndex) {
ImageModel temp = imagesList.get(startIndex);
for (int i = startIndex + 1; i <= lastIndex; i++) {
imagesList.set(i - 1, imagesList.get(i));
}
imagesList.set(lastIndex, temp);
mGrid.removeAllViews();
setThumbnail(imagesList);
}
break;
}
return true;
}
Source Code:-please find attachment.
0 Comment(s)