Как получить доступ к 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;
}