您的位置:首页 > 其它

任意移动的ImageView, 可以根据速率来判断是移动还是点击

2016-07-26 17:52 531 查看
public class MyView extends ImageView {

float downX, downY;
float moveX, moveY;

Context mContext;

//速度追踪器
VelocityTracker velocityTracker;

public MyView(Context context) {
super(context);
mContext = context;
}

public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
setImageResource(R.mipmap.shopping_cart);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
downX = event.getRawX();
downY = event.getRawY();
if (velocityTracker==null){
velocityTracker = VelocityTracker.obtain();
}else{
velocityTracker.clear();
}

velocityTracker.addMovement(event);
break;
case MotionEvent.ACTION_MOVE:
moveX = event.getRawX();
moveY = event.getRawY();

this.setX(getX() + (moveX - downX));
this.setY(getY() + (moveY - downY));
downX = moveX;
downY = moveY;

velocityTracker.addMovement(event);
velocityTracker.computeCurrentVelocity(1000);// 用于计算速度   1000 为毫秒

break;
case MotionEvent.ACTION_UP:

if (velocityTracker.getXVelocity()==0 && velocityTracker.getYVelocity()==0){
Toast.makeText(mContext,"OnClick...",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(mContext,"Move...",Toast.LENGTH_SHORT).show();
}

Log.i("msg","velocityTracker.getXVelocity()==="+velocityTracker.getXVelocity());
Log.i("msg","velocityTracker.getYVelocity()==="+velocityTracker.getYVelocity());
break;
}
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: