Как получить доступ к paren (LinearLayout) t зрения во время DragAndDrop, используя DragEvent.getLocalState()?

введите описание изображения здесь

Как показано выше, у меня есть 3 LinearLayouts, каждый из которых имеет ImageView и TextView внутри них. К каждому представлению изображения прикреплен OnLongClickListener. AbsoluteLayout, который инкапсулирует все объекты, имеет прикрепленный OnDragListener.

Внутри метода onDrag мне нужно получить LinearLayout, который является родителем ImageView, который я перетаскиваю, чтобы я мог изменить положение всего LinearLayout, задав верхнее и левое поля.

Я написал следующий код, надеясь, что смогу получить доступ к родительскому LinearLayout, но безуспешно.

@Override
public boolean onDrag(View view, DragEvent event) {
if(event.getAction() == DragEvent.ACTION_DROP){
View v = (View) event.getLocalState();
ImageView iv = (ImageView) v;
ViewParent parent = iv.getParent();
LinearLayout l;
if (parent == null) {
     Log.d("TEST", "this.getParent() is null");
}
else {
      if (parent instanceof ViewGroup) {
           ViewParent grandparent = ((ViewGroup) parent).getParent();
           if (grandparent == null) {
                 Log.d("TEST", "((ViewGroup) this.getParent()).getParent() is null");
                        }
       else {
            if (parent instanceof AbsoluteLayout) {
                l = (LinearLayout) grandparent;
               Log.d("TEST","Successfully acquired linear layout");
                            }
                            else {
                                Log.d("TEST", "((ViewGroup) this.getParent()).getParent() is not a RelativeLayout");
                            }
                        }
                    }
                    else {
                        Log.d("TEST", "this.getParent() is not a ViewGroup");
                    }
                }}

1 ответ

Оказывается, это было так же просто, как сделать следующее

@Override
public boolean onDrag(View view, DragEvent event) {
    String TAG = "DragDrop";
    switch (event.getAction()) {
        case DragEvent.ACTION_DROP: {
            View v = (View) event.getLocalState();
            ImageView iv = (ImageView) v;

            ViewParent parent = iv.getParent();
            LinearLayout l = (LinearLayout) parent;
            AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams)l.getLayoutParams();
            x = (int) event.getX() - (l.getWidth() / 2);
            y = (int) event.getY() - (l.getHeight() / 2) + 30;
            params.x = x;
            params.y = y;
            l.setLayoutParams(params);

            iv.setVisibility(iv.VISIBLE);
            //boardName.setVisibility(View.VISIBLE);

            break;
        }
    }
    return true;
}
Другие вопросы по тегам