Ho utilizzato la chiamata Service
per creare una finestra mobile che fluttua su tutte le altre viste/attività. Questa finestra ha il suo Activity
ed è diversa da Dialog.Come posso trascinare e rilasciare con più attività?
ora voglio aggiungere un'azione Drag Drop & a questa finestra, ad esempio, se si fa clic su un lungo ImageView
nella finestra mobile, è possibile trascinare e rilasciare in un altro Activity
(o attività di base). Ho provato a utilizzare OnLongClickListener
per attivare l'evento Trascina e ho aggiunto OnDragListener
per catturare l'evento Drop. Ecco quello che ho finora:
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
}
classe MyDragEventListener è:
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;
}
Il motivo ho implementato OnDragListener
è quello di ascoltare ACTION_DROP
evento a base di attività quando ImageView
è caduto. Ciò mi consente di determinare se ImageView è stato rilasciato sull'immagine di destinazione o il layout. Ecco la mia attività di base:
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);
}
Il problema è OnDragListener
in DragAndDropDemo
non viene richiamato, quindi non ho potuto prendere l'evento Drop in mia base di attività. Ho visto molti esempi di Drag and Drop, ma non ho mai trovato la soluzione giusta. Mi chiedo se è possibile lanciare un evento Trascinare & su diverse attività in Android. Se Android potesse farlo, quale sarebbe?
C'è qualcuno può aiutare?