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.getX();
y=event.getY();
break;
case MotionEvent.ACTION_MOVE:
mx=event.getX();
my=event.getY();
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;
}
});
浮动框的代码
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.x = 0;
mParams.y = 0;
mWM.addView(ivCursor, mParams);
当我手指滑动的时候 浮动框是跟着动的 松开后 再去滑动当发生move事件的时候浮空框就又从原点开始滑动了 有什么办法能让浮动框不从原点开始 就从停止的地方开始滑动啊 发生这种情况是代码出现的问题吗 还是android本身就是这样设计的 有没有大神帮忙解答下?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
应该是你这行代码出错了:mWM.updateViewLayout(ivCursor, mParams);
你这行代码设置的窗体位置并不是以目前窗体所在的位置为基准,这是个绝对值。
第一次你滑动的时候没有问题,是因为第一次本身就是在初始位置(0,0);
第二次你滑动的时候,ACTION_DOWN只是记录当前按下坐标;当ACTION_MOVE的时候,因为rx和ry是目前点与按下点的差值,也就是说,你的这个滑动的值都是从0开始的;而你设置layout的话,就是根据你给的rx和ry设置的,并不是与当前位置的差值。
你的这个滑动的差值始终从0开始,那么你这个窗体始终从(0,0)位置开始滑动。
关于相对位置移动API,建议楼主看一看以下两个API:
`offsetLeftAndRight(offsetX); //水平方向上移动
offsetTopAndBottom(offsetY); //竖直方向上移动`