Добавление ImageView к LinearLayout в ACD.DROP onDragListener в Android - PullRequest
0 голосов
/ 29 апреля 2020

Я хотел бы добавить ImageView в LinearLayout в событии onDragListener, ACTION_DROP. Я могу это сделать, однако размер ImageView очень мал при добавлении в LinearLayout. Я хотел бы, чтобы ImageView заполнил размер LinearLayout.

Я создал подкласс ImageView для создания SquareImageView (блок из красного кирпича), а также создал SquareLayout (с фоном океана), в который мне нужно добавить SquareImageView.

Ниже приведен мой код для ACTION_DROP. Также прикреплен снимок результата после перетаскивания.

enter image description here

  @Override
    public boolean onDrag(View v, DragEvent dragEvent) {
        Log.d(LOG_TITLE, "OnDragListener called for action = " + dragEvent.getAction());
        switch (dragEvent.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                Log.d(LOG_TITLE, "ACTION_DRAG_StARTED");
                // do nothing
                break;
            case DragEvent.ACTION_DRAG_ENTERED:
                Log.d(LOG_TITLE,"ACTION_DRAG_ENTERED");
                break;
            case DragEvent.ACTION_DRAG_EXITED:
                Log.d(LOG_TITLE," ACTION_DRAG_EXITED");
                break;
            case DragEvent.ACTION_DROP:
                Log.d(LOG_TITLE,"ACTION_DROP");
                View view = (View) dragEvent.getLocalState();
                ViewGroup owner = (ViewGroup) view.getParent();
                owner.removeView(view);
                Log.d(LOG_TITLE," Tag of view = " + view.getTag());
                Log.d(LOG_TITLE,"Before view tag = " + view.getTag() + " w = " + view.getLayoutParams().width +  " h = " + view.getLayoutParams().height);
                SquareLayout container = (SquareLayout) v;
                int h = container.getHeight();
                int w = container.getWidth();
                Log.d(LOG_TITLE, "Container tag= "+ container.getTag()  + " size= w= "+ w + " ,h= " + h );

                SquareImageView iv = (SquareImageView)view;

                iv.setLayoutParams(new SquareLayout.LayoutParams(
                        SquareLayout.LayoutParams.WRAP_CONTENT,
                        SquareLayout.LayoutParams.WRAP_CONTENT));
                iv.getLayoutParams().height = h;
                iv.getLayoutParams().width = w;
                Log.d(LOG_TITLE," iv tag = " + view.getTag() + " w = " + view.getLayoutParams().width +  " h = " + view.getLayoutParams().height);
                container.addView(view);
                view.setVisibility(View.VISIBLE);
                break;
            case DragEvent.ACTION_DRAG_ENDED:
                Log.d(LOG_TITLE,"ActioN_DRAG_ENDED");
                break;
            default:
                Log.d(LOG_TITLE, " Invalid drag event action ");
                break;
        }
        return true;
    }
};
...