首页 > 关于 ontouchListener 求看代码

关于 ontouchListener 求看代码

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的时候,因为rxry是目前点与按下点的差值,也就是说,你的这个滑动的值都是从0开始的;而你设置layout的话,就是根据你给的rxry设置的,并不是与当前位置的差值。
你的这个滑动的差值始终从0开始,那么你这个窗体始终从(0,0)位置开始滑动。
关于相对位置移动API,建议楼主看一看以下两个API:

offsetLeftAndRight(offsetX);    //水平方向上移动
offsetTopAndBottom(offsetY);    //竖直方向上移动

个人想法你可以试下:
记录滑动停止的坐标,使用Popupwindow的showAtLocation();方法固定弹窗。


试试用getRawX,getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标
真实的位置应该是getRawX() - getX()

【热门文章】
【热门文章】