[英]Android in drag and drop , Drop is not working
在这里我放了我的代码,当我放下视图(ImageView)时它是不可见的,请帮助我
public class MainActivity extends ActionBarActivity {
ImageView ivfirst;
private android.widget.RelativeLayout.LayoutParams layoutParams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivfirst = (ImageView) findViewById(R.id.imgView);
ivfirst.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipData.Item item = new ClipData.Item((CharSequence) v
.getTag());
String[] mimeTypes = { ClipDescription.MIMETYPE_TEXT_PLAIN };
ClipData dragData = new ClipData(v.getTag().toString(),
mimeTypes, item);
View.DragShadowBuilder myShadow = new View.DragShadowBuilder(
ivfirst);
v.startDrag(dragData, myShadow, null, 0);
return true;
}
});
ivfirst.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
switch(event.getAction())
{
case DragEvent.ACTION_DRAG_STARTED:
layoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams();
// Do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
int x_cord = (int) event.getX();
int y_cord = (int) event.getY();
break;
case DragEvent.ACTION_DRAG_EXITED :
x_cord = (int) event.getX();
y_cord = (int) event.getY();
layoutParams.leftMargin = x_cord;
layoutParams.topMargin = y_cord;
v.setLayoutParams(layoutParams);
break;
case DragEvent.ACTION_DRAG_LOCATION :
x_cord = (int) event.getX();
y_cord = (int) event.getY();
break;
case DragEvent.ACTION_DRAG_ENDED :
// Do nothing
break;
case DragEvent.ACTION_DROP:
// Do nothing
break;
default: break;
}
return true;
}
});
ivfirst.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
ivfirst);
ivfirst.startDrag(data, shadowBuilder, ivfirst, 0);
ivfirst.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
});
}
}
当我运行该程序时,它正常运行,但无法正常运行,请向我建议我错了
这是因为您在ACTION_DROP
什么也不做。
ACTION_DRAG_EXITED
说明 :
getAction()返回的操作常量:表示用户已将拖动阴影移到View的边界框之外。
拖放时,您尚未为拖动的View
定义任何行为。
我研究了Android Launcher代码,以了解它们如何拖放。 我真的很喜欢他们的对象模型。 他们所做的,可能是对您有益的考虑,是将处理拖放的责任移到了其中包含所有可拖动视图的ViewGroup中。 触摸事件在那里处理而不是在您的视图中处理。
两个关键类别:
DragLayer –实现自定义ViewGroup,该ViewGroup协调屏幕上视图的移动。 启动器DragLayer是FrameLayout的子类。
DragController –该对象是执行大多数工作以支持拖放的控制器。
他们要做的另一件事是直到您放下要拖动的对象才移动实际视图。 但是,它看起来不是那样,因为在屏幕上您会看到根据手指(或指针)移动而移动的视图构造的位图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.