关于 ontouchListener的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于 ontouchListener的问题

2016-03-11 13:58:45 1912 1
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本身就是这样设计的 有没有大神帮忙解答下?

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:59:08

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

    0 0
相关问答

1

回答

为什么这个progressDialog会 ?

2020-08-21 14:55:24 208浏览量 回答数 1

1

回答

Popupwindow中使用AutoCompleteTextView报错问题?报错

2020-06-22 17:26:29 324浏览量 回答数 1

1

回答

SwipeRefreshLayout如何在fragment使用??报错

2020-06-22 11:02:43 226浏览量 回答数 1

1

回答

Widget使用SurfaceView? 400 报错

2020-06-01 14:45:39 322浏览量 回答数 1

1

回答

一个和listview有关的触摸事件问题? 400 报错

2020-06-02 17:02:34 208浏览量 回答数 1

1

回答

View,ViewGroup事件分发

2020-04-10 12:42:10 620浏览量 回答数 1

1

回答

Android View onTouchEvent与onClick的调用问题。

2016-05-27 09:18:16 1572浏览量 回答数 1

1

回答

OnTouchListener,OnLongClickListener ,OnClickListener区别

2016-03-23 16:35:38 1510浏览量 回答数 1

1

回答

关于Activity的onTouchEvent被recyclerView阻拦?

2016-03-12 09:45:50 2341浏览量 回答数 1

1

回答

关于ontouchlistener的监听问题

2016-03-12 09:55:28 2272浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
文章
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载