gpt4 book ai didi

android - 如何拖放多个 Activity ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:33 25 4
gpt4 key购买 nike

我使用 Service 调用创建了一个悬浮在所有其他 View /Activity 之上的 float 窗口。此窗口有自己的 Activity,与 Dialog 不同。

现在我想给这个窗口添加一个拖放操作,例如如果你在 float 窗口中长按一个ImageView,你可以将它拖放到另一个Activity(或基础 Activity )。我曾尝试使用 OnLongClickListener 来触发 Drag 事件,并添加了 OnDragListener 来捕获 Drop 事件。这是我到目前为止所拥有的:

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 类是:

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;
}

我实现 OnDragListener 的原因是在放置 ImageView 时监听基础 Activity 中的 ACTION_DROP 事件。这使我能够确定 ImageView 是否被放置在目标图像或布局上。这是我的基本 Activity :

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 没有被调用,所以我无法在我的基本 Activity 中捕获 Drop 事件。我见过许多拖放示例,但从未找到正确的解决方案。我想知道是否可以将拖放事件抛给 Android 中的不同 Activity。如果 Android 可以做到,那会是什么?

有没有人可以帮忙?

最佳答案

我自己找到了解决方案。我将 OnDragListener 集成到 MyFloatableActivity 中,并将 Intent 发送到 DragAndDropDemo Activity ,以便在发生拖放事件时接收 Intent 。

这是我的代码。

public class MyFloatableActivity extends FloatActivity {
...

@Override
protected void onCreate(Bundle savedInstanceState) {
...

mImg.setOnDragListener(new View.OnDragListener() {

@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
if (event.getClipDescription().hasMimeType(
ClipDescription.MIMETYPE_TEXT_PLAIN)) {
return true;
} else {
return false;
}
case DragEvent.ACTION_DRAG_ENTERED:
case DragEvent.ACTION_DRAG_LOCATION:
case DragEvent.ACTION_DRAG_EXITED:
return true;
case DragEvent.ACTION_DRAG_ENDED:
case DragEvent.ACTION_DROP:
Intent intent = new Intent();
intent.setAction("com.test.DragAndDrop");
intent.putExtra("Drop", 0);
sendBroadcast(intent);
return true;

}
return false;
}

});
...
}

在 DragAndDropDemo 中,

public class DragAndDropDemo extends Activity {
...
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("com.test.DragAndDrop");
registerReceiver(mBR, filter);
}

@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mBR);
}

BroadcastReceiver mBR = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
int flag = intent.getIntExtra("Drop", 0);
switch (flag) {
case 0:
mText.setText("dropped!");
mImg.setImageResource(R.drawable.icon_argentina);
break;
}
}

};
}

关于android - 如何拖放多个 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16515725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com