开发者社区> 问答> 正文

关于 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本身就是这样设计的 有没有大神帮忙解答下?

展开
收起
蛮大人123 2016-03-11 13:58:45 2184 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    应该是你这行代码出错了:
    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); //竖直方向上移动`

    2019-07-17 18:59:08
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载