您的位置:首页 > 其它

自定义view重写触摸事件-imageview为例

2016-02-17 11:50 441 查看
package com.bdyl.view;
import com.bdyl.constance.Logs;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MyImage extends ImageView {
private float mOldX;
private float mOldY;
private float mCurrentX;
private float mCurrentY;
private int state = -1;

public static final int left = 1;
public static final int right = 2;
public static final int normal = 3;

public MyImage(Context context, AttributeSet attrs) {
super(context, attrs);
}
/*
*重写触摸事件
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
// 按下
case MotionEvent.ACTION_DOWN:
mOldX = event.getX();
mOldY = event.getY();
state = normal;
break;
// 移动,根据坐标判断移动方向(偏移量是需要定义dimen,这里为了方便)
case MotionEvent.ACTION_MOVE:
mCurrentX = event.getX();
mCurrentY = event.getY();
if (mCurrentX - mOldX > 0 && Math.abs(mCurrentY - mOldY) < 10) {
state = right;
Logs.v("向右>>>>");
}
else if (mCurrentX - mOldX < 0
&& Math.abs(mCurrentY - mOldY) < 10) {
state = left;
Logs.v("向向左>>>>");

}
else if (mCurrentY - mOldY > 0
&& Math.abs(mCurrentX - mOldX) < 10) {

}
else if (mCurrentY - mOldY < 0
&& Math.abs(mCurrentX - mOldX) < 10) {
}
break;
// 释放
case MotionEvent.ACTION_UP:
switch (state) {
case right:
mMoveListener.last();
Logs.v("向right up  ");
break;
case left:
mMoveListener.next();
Logs.v("向向左 up  ");
break;
case normal:
mMoveListener.click();
break;
}
break;
}
return true;

}
private OnMovePicture mMoveListener;
public void setOnMovePicture(OnMovePicture move){
mMoveListener= move;
}
/*
*左右滑动点击的回调接口
*/
public interface OnMovePicture{
void next();
void last();
void click();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: