写了一个类似鼠标的东西 在屏幕上有个view 然后加一个ontouchlistener(不是加给view的) 以下是部分代码 一个浮动框的代码 和 ontouch事件的代码
mWM = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE);
ivCursor = new ImageView(getBaseContext());
ivCursor.setImageResource(R.drawable.ic_launcher);
mParams = new WindowManager.LayoutParams();// 对ivCursor对象的参数描述对象
mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;// 宽度自适应
mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;// 高度自适应
mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;// 设置成不能获取焦点
mParams.type = LayoutParams.TYPE_PHONE;
// 设置图片格式,效果为背景透明
mParams.format = PixelFormat.RGBA_8888;
//mParams.gravity = Gravity.TOP | Gravity.LEFT;
mParams.x = 0;// 相对于屏幕原点的x轴距离
mParams.y = 0;// 相对于屏幕原点的y轴距离
mWM.addView(ivCursor, mParams);
relativeLayout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
x=event.getRawX();
y=event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
mx=event.getRawX();
my=event.getRawY();
rx=mx-x;
ry=my-y;
mParams.x =(int) rx;
mParams.y =(int)ry;
mWM.updateViewLayout(ivCursor, mParams);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
});
然后问题就出现了 第一次去 down --move -- up 很正常 那个浮动框也跟着动 up之后也就停在了移动过后的位置 但是第二次 再去 down -- move 的时候 当出现move事件的时候那个浮动框就回到了刚开始的初始位置 然后再去跟着移动再停止 这是怎么回事啊 为什么会出现这样的情况啊
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个是因为你在回调MotionEvent.ACTION_MOVE的方法里,mParams.x和mParams.y每次都是以原点为基准进行移动的,请用以下代码试试:
private int mParamsX, mParamsY;
relativeLayout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
x=event.getRawX();
y=event.getRawY();
// 先记录一下在手指按下时view所在位置
mParamsX = mParams.x;
mParamsX = mParams.x;
break;
case MotionEvent.ACTION_MOVE:
mx=event.getRawX();
my=event.getRawY();
rx=mx-x;
ry=my-y;
mParams.x = mParamsX + (int) rx;
mParams.y = mParamsY + (int) ry;
mWM.updateViewLayout(ivCursor, mParams);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
});