package com.example.myapplication.initview;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
/**
* Created by pw on 2019/3/27 13:28
* E-Mail Address: pw163.com
*/
@SuppressLint("AppCompatCustomView")
public class MyImageView extends ImageView {
private final Context context;
private boolean isDrag = false;
private int measuredWidth;
private int measuredHeight;
private int maxHeight;
private int maxWidth;
private float downx;
private float downy;
int l, r, t, b; //上下左右四个点偏移量
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
//判断是否可以滑动
public boolean isDrag() {
return isDrag;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
/**
* 获取屏幕宽高
*/
measuredWidth = getMeasuredWidth(); //获取控件得宽度
measuredHeight = getMeasuredHeight(); // 获取控件高度
maxWidth = UiUtil.getMaxWidth(context); //屏幕得宽度
maxHeight = UiUtil.getMaxHeight(context); //屏幕得高度
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.isEnabled()) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
setPressed(true);
isDrag = false;
downx = event.getX();
downy = event.getY();
return true;
case MotionEvent.ACTION_MOVE:
setPressed(true);
float mx = event.getX() - downx;
float my = event.getY() - downy;
//判断点击事件和滑动事件 3 时候为点击事件得峰值
if (Math.abs(mx) > 3 || Math.abs(my) > 3) {
l = (int) (getLeft() + mx);
r = l + measuredWidth;
t = (int) (getTop() + my);
b = t + measuredHeight;
/**
* 让我们可滑动得控件在可控范围内
*/
if (l < 0) {
l = 0;
r = l + measuredWidth;
} else if (r > maxWidth) {
r = maxWidth;
l = r - measuredWidth;
}
if (t < 0) {
t = 0;
b = t + measuredHeight;
} else if (b > maxHeight) {
b = maxHeight;
t = b - measuredHeight;
}
layout(l,t,r,b);
isDrag = true;
} else {
isDrag = false;
}
return true;
case MotionEvent.ACTION_UP:
setPressed(false);
return true;
default:
return super.onTouchEvent(event);
}
}
return super.onTouchEvent(event);
}
}