Tôi đã sử dụng cuộc gọi Service
để tạo Cửa sổ nổi nổi trên tất cả các chế độ xem/hoạt động khác. Cửa sổ này có Activity
và khác với Hộp thoại.Tôi có thể kéo và thả bằng nhiều hoạt động như thế nào?
Bây giờ tôi muốn thêm hành động thả & Thả vào cửa sổ này, ví dụ nếu bạn bấm dài ImageView
trong Cửa sổ Nổi, bạn có thể Kéo và Thả nó vào một Activity
(hoặc Hoạt động cơ sở) khác. Tôi đã cố gắng sử dụng OnLongClickListener
để kích hoạt sự kiện Kéo và thêm OnDragListener
để bắt sự kiện thả. Dưới đây là những gì tôi có cho đến nay:
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
}
lớp MyDragEventListener là:
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;
}
Lý do tôi thực hiện OnDragListener
là lắng nghe ACTION_DROP
sự kiện trong Hoạt động cơ sở khi ImageView
được giảm. Điều này cho phép tôi xác định xem ImageView đã bị xóa trên hình ảnh đích hay bố cục. Dưới đây là Hoạt động cơ sở của tôi:
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);
}
Vấn đề là OnDragListener
trong DragAndDropDemo
không được gọi, vì vậy tôi không thể nắm bắt những sự kiện Drop trong Hoạt động cơ sở của tôi. Tôi đã thấy nhiều ví dụ về Kéo và Thả, nhưng chưa bao giờ có giải pháp đúng. Tôi tự hỏi nếu ném một sự kiện thả & thả vào hoạt động khác nhau trong Android là có thể. Nếu Android có thể làm điều đó, nó sẽ là gì?
Có ai có thể giúp bạn không?