Android中Drag and Drop拖拽功能的使用1-----基本实现

本文介绍了Android中使用内置API实现拖拽功能的步骤,包括View的startDrag方法和OnDragListener监听。通过长按启动拖拽,详细代码示例可在给出的博客链接中查看。
摘要由CSDN通过智能技术生成

Android中的拖拽功能是有自带的api的;(很多时候会误以为要自定义控件,所以我放到了,自定义目录下)
参考文档:
http://www.android-doc.com/guide/topics/ui/drag-drop.html
我写了一个例子分析:
效果图:
在这里插入图片描述
思路:
1主要用到了View的startDrag(startDragAndDrop API24+) 方法
2拖拽的监听OnDragListener方法
具体实现:
第一步:通过一个长按事件启动拖拽:

imageView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Intent intent = new Intent();
                ClipData clipData = ClipData.newIntent("label", intent);

                View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                v.startDrag(null, shadowBuilder, imageView, 0);
                //震动反馈
                v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
                return true;
            }
        });

第二步:OnDragListener监听拖拽

linearLayout.setOnDragListener(new View.OnDragListener() {
            @Override
            public boolean onDrag(View v, DragEvent event) {
                //v 永远是设置该监听的view,这里即fl_blue
                String simpleName = v.getClass().getSimpleName();
//                Log.w(BLUE, "view name:" + simpleName);

                //获取事件
                int action = event.getAction();
                switch (action) {
                    case DragEvent.ACTION_DRAG_STARTED:
                        Log.i("111", "开始拖拽");
                        imageView.setVisibility(View.INVISIBLE);
               
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android Drag and DropAndroid 的一个功能,可以让用户轻松地拖放对象和其他UI元素。 这个功能可以在许多应用程序使用,例如拖放图像、文件、文本等等。如果你想要学习如何使用 Drag and Drop 功能,可以查阅 Android 的官方文档。这里有一个示例代码可以供参考: 首先在 XML 布局文件添加两个视图,一个用作拖动源,另一个用作目标: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/source" android:text="Drag Me" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="#FFCC33" android:gravity="center" android:textColor="#FFFFFF" android:textSize="20sp" android:layout_margin="10dp" android:longClickable="true" android:tag="Dragabble Text View"/> <TextView android:id="@+id/target" android:text="Drop Here" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="#333333" android:gravity="center" android:textColor="#FFFFFF" android:textSize="20sp" android:layout_margin="10dp" android:tag="Droppable Text View"/> </LinearLayout> ``` 然后在 Activity 实现 drag and drop 的逻辑: ``` public class MainActivity extends Activity implements View.OnLongClickListener, View.OnDragListener { private TextView sourceTextView; private TextView targetTextView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sourceTextView = (TextView) findViewById(R.id.source); sourceTextView.setOnLongClickListener(this); targetTextView = (TextView) findViewById(R.id.target); targetTextView.setOnDragListener(this); } @Override public boolean onLongClick(View v) { ClipData.Item item = new ClipData.Item((CharSequence) v.getTag()); String[] mimeTypes = { ClipDescription.MIMETYPE_TEXT_PLAIN }; ClipData data = new ClipData(v.getTag().toString(), mimeTypes, item); View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); v.startDrag(data, shadowBuilder, v, 0); return true; } @Override public boolean onDrag(View v, DragEvent event) { int action = event.getAction(); switch (action) { case DragEvent.ACTION_DRAG_STARTED: // do nothing break; case DragEvent.ACTION_DRAG_ENTERED: // change the target view background color v.setBackgroundColor(Color.YELLOW); break; case DragEvent.ACTION_DRAG_EXITED: // reset the target view background color v.setBackgroundColor(Color.GRAY); break; case DragEvent.ACTION_DROP: // handle the dragged data ClipData.Item item = event.getClipData().getItemAt(0); String dragData = item.getText().toString(); targetTextView.setText(dragData); break; case DragEvent.ACTION_DRAG_ENDED: // reset the source and target view background color sourceTextView.setBackgroundColor(Color.YELLOW); targetTextView.setBackgroundColor(Color.GRAY); break; default: break; } return true; } } ``` 这个代码演示了一个简单的拖放操作。当用户按源 TextView 时,他/她可以拖动它到目标 TextView 上面。当放手时,目标视图会显示源视图上的文本。在本例,通过实现 OnLongClickListener 和 OnDragListener 接口来处理拖放操作。如果你需要更高级的 Drag and Drop 操作,可以查阅 Android 的官方文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值