android - studio - gridview bootstrap




عناصر إعادة ترتيب Android GridView عبر السحب والإفلات (6)

لدي GridView في تطبيق أعمل عليه. أود أن أتمكن من إعادة ترتيب العناصر في GridView عبر السحب والإسقاط. لقد وجدت الكثير من المساعدة لـ ListViews ولكن لا شيء على GridViews. أريد تحقيق سلوك مثل هذا في تطبيق المشغل http://www.youtube.com/watch?v=u5LISE8BU_E&t=5m30s . أيه أفكار؟


إذا لم تحل هذه المشكلة ، فسوف أقوم بتزويد الرمز الخاص بي. لكنه يعمل على Android 3.0 والإصدارات الأحدث ، لأني استخدم إطار android drag-n-drop

grid = (GridView) findViewById(R.id.grid);
grid.setAdapter(new DragGridAdapter(items, getActivity()));

....

grid.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                GridView parent = (GridView) v;

                int x = (int) event.getX();
                int y = (int) event.getY();

                int position = parent.pointToPosition(x, y);
                if (position > AdapterView.INVALID_POSITION) {

                    int count = parent.getChildCount();
                    for (int i = 0; i < count; i++) {
                        View curr = parent.getChildAt(i);
                        curr.setOnDragListener(new View.OnDragListener() {

                            @Override
                            public boolean onDrag(View v, DragEvent event) {

                                boolean result = true;
                                int action = event.getAction();
                                switch (action) {
                                case DragEvent.ACTION_DRAG_STARTED:
                                    break;
                                case DragEvent.ACTION_DRAG_LOCATION:
                                    break;
                                case DragEvent.ACTION_DRAG_ENTERED:
                                    v.setBackgroundResource(R.drawable.shape_image_view_small_gallery_selected);
                                    break;
                                case DragEvent.ACTION_DRAG_EXITED:
                                    v.setBackgroundResource(R.drawable.shape_image_view_small_gallery_unselected);
                                    break;
                                case DragEvent.ACTION_DROP:
                                    if (event.getLocalState() == v) {
                                        result = false;
                                    } else {
                                        View droped = (View) event.getLocalState();
                                        GridItem dropItem = ((DragGridItemHolder) droped.getTag()).item;

                                        GridView parent = (GridView) droped.getParent();
                                        DragGridAdapter adapter = (DragGridAdapter) parent.getAdapter();
                                        List<GridItem> items = adapter.getItems();

                                        View target = v;
                                        GridItem targetItem = ((DragGridItemHolder) target.getTag()).item;
                                        int index = items.indexOf(targetItem);
                                        items.remove(dropItem);
                                        items.add(index, dropItem);
                                        adapter.notifyDataSetChanged();
                                    }
                                    break;
                                case DragEvent.ACTION_DRAG_ENDED:
                                    v.setBackgroundResource(R.drawable.shape_image_view_small_gallery_unselected);
                                    break;
                                default:
                                    result = false;
                                    break;
                                }
                                return result;
                            }
                        });
                    }

                    int relativePosition = position - parent.getFirstVisiblePosition();


                    View target = (View) parent.getChildAt(relativePosition);

                    DragGridItemHolder holder = (DragGridItemHolder) target.getTag();
                    GridItem currentItem = holder.item;
                    String text = currentItem.getFile().getAbsolutePath();

                    ClipData data = ClipData.newPlainText("DragData", text);
                    target.startDrag(data, new View.DragShadowBuilder(target), target, 0);
                }
            }
            return false;

و DragGridAdapter

public class DragGridAdapter extends BaseAdapter{
private Context context;
private List<GridItem> items;

public DragGridAdapter(List<GridItem> items, Context context){
    this.context = context;
    this.items = items;
}

@Override
public int getCount() {
    return items.size();
}

@Override
public Object getItem(int position) {
    return items.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    DragGridItemHolder holder;
    if (convertView == null) {
        holder = new DragGridItemHolder();

        ImageView img = new ImageView(context);
        holder.image = img;
        convertView = img;
        convertView.setTag(holder);
    } else {
        holder = (DragGridItemHolder) convertView.getTag();
    }
    holder.item = items.get(position);
    holder.image.setImageBitmap(items.get(position).getBitmap());
    return convertView;
}

public List<GridItem> getItems() {
    return items;
}

آمل أن يساعدك


إلقاء نظرة على DraggableGridView من thquinn ، تم تطوير هذا الهدف الذي يستهدف Android 2.2 (مستوى API 8). أمل أن هذا يساعد شخصاما :)


بلدي نسخة عن السحب والإسقاط عرض الشبكة https://github.com/askerov/DynamicGrid .
إنه يمتد GridView الأصلي ، ويدعم السحب والإفلات لإعادة ترتيب العناصر ، والتنقل التلقائي إذا كان السحب خارج الشاشة. يعمل بشكل كامل على 3.0 + api ، لكنه يدعم 2.2 و 2.3 مع وجود قيود (بدون رسوم متحركة).



مشروع PagedDragDropGrid المحتمل هو ما تحتاجه: https://github.com/mrKlar/PagedDragDropGrid

يوفر هذا ViewGroup مخصصة (شبيهة بـ GridView) مع ميزة إعادة الترتيب السلس (تمامًا كما هو الحال في الفيديو). ربما يتطلب الأمر بعض التخصيصات ، لكن الأمر يستحق.

آمل أن يساعد.


هنا library من h6ah4i التي تستفيد من Recycler المشاهدات لتقديم السحب وعرض قطرة مع قدرات إعادة الطلب.





drag-and-drop