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本身就是这样设计的 有没有大神帮忙解答下啊
如果我没看错,应该是你这行代码出错了:
你这行代码设置的窗体位置并不是以目前窗体所在的位置为基准,这是个绝对值。
第一次你滑动的时候没有问题,是因为第一次本身就是在初始位置
(0,0)
;第二次你滑动的时候,
ACTION_DOWN
只是记录当前按下坐标;当ACTION_MOVE
的时候,因为rx
和ry
是目前点与按下点的差值,也就是说,你的这个滑动的值都是从0开始的;而你设置layout
的话,就是根据你给的rx
和ry
设置的,并不是与当前位置的差值。你的这个滑动的差值始终从0开始,那么你这个窗体始终从
(0,0)
位置开始滑动。关于相对位置移动API,建议楼主看一看以下两个API: