0

私はAndroidを初めて使用し、要件に従ってグリッドビューにドラッグアンドドロップを実装してスワップ操作を実現し、すべてが正常に機能し、これまでに行ったことをグリッドビュー内でアイテムを交換します:-タッチリストナーをアダプタークラスのイメージビューに実装します

ここ-

holder.disp_imgview.setOnTouchListener(new MyTouchListener(mcontext));

holder は、アダプタ クラスの内部クラスであり、タッチ イベントの MyTouchListner クラスです。

ここ -

public final class MyTouchListener  implements OnTouchListener {

public boolean onTouch(View view, MotionEvent motionEvent) {
        // TODO Auto-generated method stub
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            vb=(Vibrator) mcontext.getSystemService(Context.VIBRATOR_SERVICE);
            vb.vibrate(100);
            DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);
            view.setVisibility(View.VISIBLE);
            view_position=view.getId();
            first_image_view=view;

            Log.v("IMAGE TOUCH", "CLICKED");
            return true;
}

ユーザーがDragShadowBuilder shadowBuilderタッチした特定の画像の影を作成し、ドラッグを開始する場所view.startDrag(data, shadowBuilder, view, 0);

次に、アダプター クラスのみで imageview のドラッグ イベントを実装します。

ここ-

holder.disp_imgview.setOnDragListener(new MyDragListener());

class MyDragListener implements OnDragListener
        {

            @Override
            public boolean onDrag(View v, DragEvent event) {
                // TODO Auto-generated method stub
                sec_view_id=v.getId();
                 first_view_id=MyTouchListener.view_position;


                switch(event.getAction())
                {
                case DragEvent.ACTION_DRAG_STARTED:

                    Log.e("ACTION", "DRAG_STARTED");

                    break;
                case DragEvent.ACTION_DRAG_ENTERED:
                    v.setBackgroundDrawable(enterShape);

                    Log.e("ACTION", "DRAG_ENTERED");
                    break;
                case DragEvent.ACTION_DRAG_LOCATION:
                    Log.e("ACTION", "DRAG_ENTERED");
                    break;
                case DragEvent.ACTION_DROP:

                    if(first_view_id!=sec_view_id)
                    {
                        Integer temp=my_image_list.get(first_view_id);
                        Integer temp_sec=my_image_list.get(sec_view_id);
                        my_image_list.set(first_view_id, temp_sec);
                        my_image_list.set(sec_view_id, temp);
                        image_adapter.notifyDataSetChanged();
                    }
                    else
                    {
                    Toast.makeText(mcontext, "CAN'T PLACE THE SAME IMAGE", 0).show();   
                    }
                    Log.e("ACTION", "ACTION_DROP");
                    break;
                case DragEvent.ACTION_DRAG_ENDED:
                    Log.e("ACTION", "DRAG_ENDED");
                    v.setBackgroundDrawable(normalShape);
                break;
                case DragEvent.ACTION_DRAG_EXITED:
                    Log.e("ACTION", "DRAG_EXITED");
                    break;

                }

                return true;
            }

        }

アクションドロップでわかるように、アレイリスト(my_image_list)のイメージを交換し、その後アダプターに変更を反映するように通知し、正常に動作していますが、問題は

2 番目のアイテムでアニメーションを実行して、グリッドビューの最初のアイテムの位置に移動し、アクション ドロップ後にアニメーションが発生するようにするにはどうすればよいでしょうか。

4

0 に答える 0