Service
コールを使用して、他のすべてのビュー/アクティビティ上に浮動するフローティングウィンドウを作成しました。このウィンドウは独自のActivity
を持ち、ダイアログとは異なります。複数のアクティビティでドラッグアンドドロップするにはどうすればよいですか?
今、私はあなたが長いフローティングウィンドウでImageView
をクリックした場合たとえば、あなたは別のActivity
(またはベースの活動)にそれをドラッグアンドドロップすることができ、このウィンドウにドラッグ&ドロップアクションを追加します。ドラッグイベントを発生させるのにOnLongClickListener
を使用しようとしましたが、ドロップイベントを捕捉するためにOnDragListener
を追加しました。ここで私はこれまで持っているものです。
public class MyFloatableActivity extends FloatActivity {
private ImageView mImg;
private MyDragEventListener mDragListen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.float_activity));
// This imageView is for Drag&Drop test
mImg = (ImageView)findViewById(R.id.drag_img));
mImg.setOnLongClickListener(new ImageView.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipData dragData = ClipData.newPlainText("dragtext", "dragtext");
v.startDrag(dragData, new View.DragShadowBuilder(v), null, 0);
return false;
}
});
mImg.setOnDragListener(mDragListen);
switchToFloat(); // Make this activity to float
}
MyDragEventListenerクラスがある:私はOnDragListener
を実装
public class MyDragEventListener implements View.OnDragListener {
private ClipData mDragData;
@Override
public boolean onDrag(View v, DragEvent event) {
final int action = event.getAction();
ImageView img;
if(v instanceof ImageView) {
img = (ImageView)v;
} else{
return false;
}
switch(action) {
case DragEvent.ACTION_DRAG_STARTED:
if(event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
Log.d("DDD", "Drag started!!!");
return true;
}else {
return false;
}
case DragEvent.ACTION_DRAG_ENTERED:
Log.d("DDD", "Entered!!!");
case DragEvent.ACTION_DRAG_LOCATION:
case DragEvent.ACTION_DRAG_EXITED:
return true;
case DragEvent.ACTION_DRAG_ENDED:
case DragEvent.ACTION_DROP:
Log.d("DDD", "Action drop!!!");
return true;
}
return true;
}
理由はImageView
がドロップされたときに、ベースの活動にACTION_DROP
イベントを聞くことです。これにより、ImageViewがデスティネーションイメージまたはレイアウト上にドロップされたかどうかを判断することができます。ここに私の基本活動です:
public class DragAndDropDemo extends Activity {
private ImageView mImg;
private MyDragEventListener mDragListen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drag_and_drop);
//findViewById(R.id.drag_layout).setOnDragListener(mDragListen);
mImg = (ImageView)findViewById(R.id.dest_img);
mImg.setOnDragListener(mDragListen);
}
問題が呼び出されていないので、私は私のベースのアクティビティにドロップイベントをキャッチすることができませんでしたDragAndDropDemo
でOnDragListener
です。私はドラッグアンドドロップの多くの例を見てきましたが、決して適切なソリューションには到達しませんでした。 Androidのさまざまなアクティビティにドラッグイベントをドロップすることが可能かどうか疑問に思っています。 Androidがそれを行うことができれば、それは何でしょうか?
誰かが助けることができますか?