上のスクショだと→の鳥がもともと表示してあるImageView、
中央にあるのがドラッグ中のものです。()
img_bird = (ImageView) findViewById(R.id.img_bird); img_bird.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { ClipData data = ClipData.newPlainText("Launch", "LaunchIcon"); view.startDrag(data, new View.DragShadowBuilder(view), (Object) view, 0); return false; } }); img_bird.setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View view, DragEvent dragEvent) { switch (dragEvent.getAction()){ case DragEvent.ACTION_DRAG_STARTED : break; case DragEvent.ACTION_DRAG_ENDED : // 終了位置を取得、それによってアレする float x = dragEvent.getX(); float y = dragEvent.getY(); break; case DragEvent.ACTION_DRAG_EXITED : break; default: break; } return false; } });
ImageViewにonTouchListenerをセット、
その中でstartDragを呼び出しています。
タッチしたときにDragが始まって、別にセットされたonDragListenerの
onDragで取得したEventを処理する感じらしいです。
なんでこんな中途半端かというと、動かせた時点で「あ、やりたいこと違うな」とおもって
今から別のコードに書き換えるから。
とりあえず忘備録として。
Android 3.0の新APIで簡単ドラッグ&ドロップ実装
Drag and Dropを用いてViewをドラッグする
6.7 ドラッグ & ドロップ - ソフトウェア技術ドキュメントを勝手に翻訳