перетащить через макеты в Android - PullRequest
2 голосов
/ 20 сентября 2011

У меня есть один линейный макет (я назову его дочерним) и один относительный макет внутри одного линейного макета.Я хочу перетаскивать элементы из относительного макета в дочерний линейный макет. Как это сделать?Я не могу перетаскивать между макетами

Ответы [ 3 ]

0 голосов
/ 17 мая 2012

в вашем случае 'DragEvent.ACTION_DROP' вы должны проверить, является ли ваше представление LinerLayour или RelativLayout. Вы можете легко проверить это с помощью instanceof.

это может быть решением:

public class MyDragListener implements OnDragListener {
 @Override
 public boolean onDrag(View v, DragEvent event) {

   int action = event.getAction();
   switch ( action ) {
   case DragEvent.ACTION_DRAG_STARTED:
     break;
   case DragEvent.ACTION_DRAG_ENTERED:
     break;
   case DragEvent.ACTION_DRAG_EXITED:
     break;
   case DragEvent.ACTION_DROP:
     View view = (View) event.getLocalState();
     ViewGroup owner = (ViewGroup) view.getParent();
     owner.removeView(view);
     if(v instanceof RelativLayout){
       RelativeLayout container = (RelativeLayout) v;
     } else {
       LinearLayout container = (LinearLayout) v;
     }
     container.addView(view);
     view.setVisibility(View.VISIBLE);
     break;
   case DragEvent.ACTION_DRAG_ENDED:
     break;
   case DragEvent.ACTION_DRAG_LOCATION:
     break;
   }
 }
}
0 голосов
/ 07 августа 2016

это может помочь

private final class MyTouchListener implements OnTouchListener {
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);
            view.setVisibility(View.INVISIBLE);
            return true;
        } else {
            return false;
        }
    }
}

class MyDragListener implements OnDragListener {
    Drawable enterShape = getResources().getDrawable(R.drawable.shape_droptarget);
    Drawable normalShape = getResources().getDrawable(R.drawable.bg);

    @Override
    public boolean onDrag(View v, DragEvent event) {
        int action = event.getAction();
        switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                // Do nothing
                break;
            case DragEvent.ACTION_DRAG_ENTERED:
                v.setBackgroundDrawable(enterShape);
                break;
            case DragEvent.ACTION_DRAG_EXITED:
                v.setBackgroundDrawable(normalShape);
                break;
            case DragEvent.ACTION_DROP:
                // Dropped, reassign View to ViewGroup
                View view = (View) event.getLocalState();
                ViewGroup owner = (ViewGroup) view.getParent();
                owner.removeView(view);
                RelativeLayout container = (RelativeLayout) v;
                container.addView(view);
                view.setVisibility(View.VISIBLE);
                break;
            case DragEvent.ACTION_DRAG_ENDED:
                v.setBackgroundDrawable(normalShape);
            default:
                break;
        }
        return true;
    }
}
0 голосов
/ 15 октября 2011

Я работаю над перетаскиванием себя, но могу сделать предложение. Вам нужно забыть об использовании стандартного main.xml и делать все в коде, используя внутренние классы. Это не так сложно, и внутренние классы могут видеть родительских слушателей.

private MotionEvent ev;
TextView mainText;
LinearLayout layout;
KeyboardView keyboard;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    KeyboardView keyboard = new KeyboardView(this);

    mainText = new TextView(this);
    mainText.setText("The main text. ");
    mainText.setHeight(120);
    mainText.setBackgroundColor(Color.LTGRAY);
    mainText.setTextColor(Color.BLACK);
    layout.addView(mainText);

    layout.addView(keyboard);

    setContentView(layout);

}

    public class KeyboardView extends View {
     .
     .
     .
    }

Chris

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...