Android中的拖拽功能是有自带的api的;(很多时候会误以为要自定义控件,所以我放到了,自定义目录下)
参考文档:
http://www.android-doc.com/guide/topics/ui/drag-drop.html
我写了一个例子分析:
效果图:
思路:
1主要用到了View的startDrag(startDragAndDrop API24+) 方法
2拖拽的监听OnDragListener方法
该讲的在上一篇已经讲过了,这里直接贴代码了:
上一篇路径:https://blog.csdn.net/zhaihaohao1/article/details/85605326
SecondActivity中
package com.zhh.android;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.util.TypedValue;
import android.view.DragEvent;
import android.view.HapticFeedbackConstants;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
/**
* 布局文件中子控件,拖拽交换位置
*/
public class SecondActivity extends Activity {
private ImageView imageView0;
private ImageView imageView1;
private ImageView imageView2;
private ImageView imageView3;
private LinearLayout ll_blue;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = SecondActivity.this;
setContentView(R.layout.activity_second);
imageView0 = (ImageView) findViewById(R.id.imageView0);
imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView2 = (ImageView) findViewById(R.id.imageView2);
imageView3 = (ImageView) findViewById(R.id.imageView3);
ll_blue = (LinearLayout) findViewById(R.id.ll_blue);
imageView0.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(null, shadowBuilder, imageView0, 0);
//震动反馈
v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
return true;
}
});
imageView1.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(null, shadowBuilder, imageView1, 1);
//震动反馈
v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConsta