感谢这个作者的博客:Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
作为新手,在这个的基础上,简单修改,完成自己想要的功能:长按,移到垃圾桶,删除数据。
主要思路是:1.获取到用户长按的操作
2.获取按下的图片的bitmap以及移动的时候动态刷新镜像
3 action_up的时候判断镜像的位置,进入是否删除逻辑
自定义控件
package com.leafact.GridView;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.os.Handler;
import android.os.Vibrator;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
/**
* 长按能选中item的,丢入垃圾箱的gridView
*
* @author leafact
*
*/
public class MoveGridView extends GridView {
private WindowManager mWindowManager;
/**
* item镜像的布局参数
*/
private WindowManager.LayoutParams mWindowLayoutParams;
/**
* 震动器
*/
private Vibrator mVibrator;
// 震动的时间,默认为100ms
private long vibratorMs = 100;
// 设置长按时间为1秒
private long responseMS = 1000;
private static boolean isMove = false;
// 按下去的x,y
private int mDownX = 0;
private int mDownY = 0;
// 移动的时候的x,y
private int mMoveX = 0;
private int mMoveY = 0;
// 抬起的x,y
private int mUpX = 0;
private int mUpY = 0;
private int mPoint2ItemTop;
private int mPoint2ItemLeft;
private int mOffset2Top;
private int mOffset2Left;
/**
* 状态栏的高度
*/
private int mStatusHeight;
public MoveGridView(Context context, AttributeSet attrs) {
super(context, attrs);
mVibrator = (Vibrator) context
.getSystemService(Context.VIBRATOR_SERVICE);
mWindowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
mStatusHeight = getStatusHeight(context); // 获取状态栏的高度
}
// 要移动的item的位置,默认为INVALID_POSITION=-1
private int mMovePosition =