【问题标题】:Android Drag and Drop of ImageView into another ImageView (or layout)Android 将 ImageView 拖放到另一个 ImageView(或布局)中
【发布时间】:2014-01-24 19:31:38
【问题描述】:

我想在另一个 ImageView 或布局中完成一个 ImageView 的简单拖放。这是一张我想做的照片

我知道的唯一方法是使用 2 个线性布局,一个“FROM”和“TO”,并将灰色字母的背景图像分配给第二个布局。

这是我的代码

public class MainActivity extends Activity implements OnTouchListener,
    OnDragListener {

private static final String LOGCAT = null;

/*
 * Here are the links I've been using
 * http://www.techrepublic.com/blog/software-engineer/try-androids-useful-drag-and-drop-api/
 * http://codingjunkie.net/android-drag-and-drop-part-2/
 * http://javapapers.com/android/android-drag-and-drop/
 */

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.letter_a).setOnTouchListener(this);        // My yellow letter a image
    findViewById(R.id.top_container).setOnDragListener(this);    // My 1st linear layout 
    findViewById(R.id.bottom_container).setOnDragListener(this); // My 2nd linear layout with "grayed a" image 
}

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(null, shadowBuilder, view, 0);
        view.setVisibility(View.INVISIBLE);
        return true;
    } else {
        return false;
    }
}

@Override
    public boolean onDrag(View layoutview, DragEvent dragevent) {

        int action = dragevent.getAction();
        View view = (View) dragevent.getLocalState();

        switch (action) {
        case DragEvent.ACTION_DRAG_STARTED:
        break;
        case DragEvent.ACTION_DRAG_ENTERED:
        break;
        case DragEvent.ACTION_DRAG_EXITED:
        break;
        case DragEvent.ACTION_DROP:
          ViewGroup owner = (ViewGroup) view.getParent();
          owner.removeView(view);
          LinearLayout container = (LinearLayout) layoutview;
          container.addView(view);
          view.setVisibility(View.VISIBLE);
          break;
        case DragEvent.ACTION_DRAG_ENDED:
            Log.d(LOGCAT, "Drag ended");
            if (dropEventNotHandled(dragevent)){
                view.setVisibility(View.VISIBLE);
            }
          break;
        default:
          break;
        }
        return true;
    }

private boolean dropEventNotHandled(DragEvent dragEvent) {
    return !dragEvent.getResult();
}
}

我已经设法让 onTouch 和 onDrag 工作并在移动时进行检测,但我想将其锁定到位,以免将其拖回原来的位置。

非常感谢!

【问题讨论】:

    标签: java android android-layout drag-and-drop imageview


    【解决方案1】:

    如果它应该留在底部容器中,只需取消注册侦听器,如果它已被丢弃在那里,例如像这样:

    case DragEvent.ACTION_DROP:
              ViewGroup owner = (ViewGroup) view.getParent();
              owner.removeView(view);
              LinearLayout container = (LinearLayout) layoutview;
              container.addView(view);
              view.setVisibility(View.VISIBLE);
              if(container.getId()==R.id.bottom_container){
                  view.setOnTouchListener(null);
                  owner.setOnDragListener(null);
              }
      break;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多