DraggingImageView :
package com.laundrylangpickcargo.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
/**
* Created by Sinaan on 2016/11/17.
*/
public class DraggingImageView extends ImageView {
private int lastX = 0;
private int lastY = 0;
private int beginX = 0;
private int beginY = 0;
private static final int screenWidth = 720;
private static final int screenHeight = 1280;
public DraggingImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
beginX = lastX;
beginY = lastY;
break;
case MotionEvent.ACTION_MOVE:
int dx = (int) event.getRawX() - lastX;
int dy = (int) event.getRawY() - lastY;
int left = getLeft() + dx;
int top = getTop() + dy;
int right = getRight() + dx;
int bottom = getBottom() + dy;
if (left < 0) {
left = 0;
right = left + getWidth();
}
if (right > screenWidth) {
right = screenWidth;
left = right - getWidth();
}
if (top < 0) {
top = 0;
bottom = top + getHeight();
}
if (bottom > screenHeight) {
bottom = screenHeight;
top = bottom - getHeight();
}
layout(left, top, right, bottom);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:
//处理拖拽和点击的冲突
if (Math.abs(lastX - beginX) < 10 && Math.abs(lastY - beginY) < 10)
return super.onTouchEvent(event);
else
return true;
default:
break;
}
return super.onTouchEvent(event);
}
}
DraggingTextView :
package com.laundrylangpickcargo.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.TextView;
/**
* Created by Sinaan on 2016/11/17.
*/
public class DraggingTextView extends TextView{
private int lastX = 0;
private int lastY = 0;
private int beginX = 0;
private int beginY = 0;
private static final int screenWidth = 720;
private static final int screenHeight = 1280;
public DraggingTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
beginX = lastX;
beginY = lastY;
break;
case MotionEvent.ACTION_MOVE:
int dx =(int)event.getRawX() - lastX;
int dy =(int)event.getRawY() - lastY;
int left = getLeft() + dx;
int top = getTop() + dy;
int right = getRight() + dx;
int bottom = getBottom() + dy;
if(left < 0){
left = 0;
right = left + getWidth();
}
if(right > screenWidth){
right = screenWidth;
left = right - getWidth();
}
if(top < 0){
top = 0;
bottom = top + getHeight();
}
if(bottom > screenHeight){
bottom = screenHeight;
top = bottom - getHeight();
}
layout(left, top, right, bottom);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:
if (Math.abs(lastX - beginX) < 10 && Math.abs(lastY - beginY) < 10)
return super.onTouchEvent(event);
else
return true;
default:
break;
}
return super.onTouchEvent(event);
}
}
布局文件中直接使用即可:
<com.laundrylangpickcargo.view.DraggingImageView
android:id="@+id/iv_home_event"
style="@style/img_style"
android:src="@mipmap/home_courierevent"/>
MainActivity中:
ivHomeEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showToast("点击");
}
});
ivHomeEvent.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showToast("长按");
//返回true标记消费事件,不继续往下传递。否则还会执行onClick点击事件
return true;
}
});