第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 拖放 Drag and drop

拖放 Drag and drop

时间:2022-07-26 09:27:22

相关推荐

拖放 Drag and drop

拖放 Drag and drop

android11-release

Android Developers > Docs > Guides Drag and drop

Android 开发者 > 文档 > 指南 拖放

View.OnDragListener

实现 View.OnDragListener 的拖动事件监听器或其 onDragEvent(DragEvent) 回调方法来接收拖动事件

拖放过程中四种状态:开始继续放下结束

Drag and drop 监听拖拽事件DragEvent 操作类型:

Drag and drop 监听拖拽事件DragEvent 有效数据:

getAction()、describeContents()、writeToParcel() 和 toString() 方法始终返回有效数据。如果某个方法不包含特定操作类型的有效数据,则根据其结果类型,该方法将返回 null 或 0。

拖动阴影

View.DragShadowBuilder 对象声明的方法来创建拖动阴影,然后在使用 startDrag() 开始拖动时将其传递给系统。作为对 startDrag() 响应的一部分,系统会通过调用您在 View.DragShadowBuilder 中定义的回调方法来获取拖动阴影。

View.DragShadowBuilder 类有两个构造函数:

View.DragShadowBuilder 类有两个方法:

XhDragSampler示例

Drag and drop官网都有详细使用说明:Android 开发者 > 文档 > 指南 拖放

长按监听进入拖拽

startDragAndDropAPI level 24(startDragAPI level 11) 进入拖拽

ClipData拖放操作传输的数据的对象View.DragShadowBuilder拖动阴影

imageView.setOnLongClickListener((View.OnLongClickListener) v -> {ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());ClipData dragData = new ClipData((CharSequence) v.getTag(),new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN},item);//View.DragShadowBuilder myShadow = new MyDragShadowBuilder(imageView);View.DragShadowBuilder myShadow = new View.DragShadowBuilder(imageView);// Starts the dragv.startDragAndDrop(dragData, // the data to be draggedmyShadow, // the drag shadow buildernull, // no need to use local data0 // flags (not currently used, set to 0));return true;});

View.OnDragListener监听

设置View.OnDragListener监听imageView.setOnDragListener(this);event.getAction()都有相应的说明,ACTION_DRAG_STARTED\ACTION_DRAG_ENDED处理开始和结束,其他action并不是非得触发或有什么先后顺序,如下面日志输出

@Overridepublic boolean onDrag(View v, DragEvent event) {final int action = event.getAction();switch (action) {case DragEvent.ACTION_DRAG_STARTED:Log.d(TAG, "DragEvent.ACTION_DRAG_STARTED = " + DragEvent.ACTION_DRAG_STARTED);return true;case DragEvent.ACTION_DRAG_ENTERED:Log.d(TAG, "DragEvent.ACTION_DRAG_ENTERED = " + DragEvent.ACTION_DRAG_ENTERED);return true;case DragEvent.ACTION_DRAG_LOCATION:Log.d(TAG, "DragEvent.ACTION_DRAG_LOCATION = " + DragEvent.ACTION_DRAG_LOCATION);return true;case DragEvent.ACTION_DRAG_EXITED:Log.d(TAG, "DragEvent.ACTION_DRAG_EXITED = " + DragEvent.ACTION_DRAG_EXITED);return true;case DragEvent.ACTION_DROP:Log.d(TAG, "DragEvent.ACTION_DROP = " + DragEvent.ACTION_DROP);return true;case DragEvent.ACTION_DRAG_ENDED:Log.d(TAG, "DragEvent.ACTION_DRAG_ENDED = " + DragEvent.ACTION_DRAG_ENDED);if (event.getResult()) {Toast.makeText(this, "The drop was handled.", Toast.LENGTH_LONG).show();} else {Toast.makeText(this, "The drop didn't work.", Toast.LENGTH_LONG).show();}return true;default:Log.e(TAG, "Unknown action type received by OnDragListener.");break;}return false;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。