java-关于ontouchlistener的监听问题

问题描述

关于ontouchlistener的监听问题

写了一个类似鼠标的东西 在屏幕上有个view 然后加一个ontouchlistener(不是加给view的) 以下是部分代码 一个浮动框的代码 和 ontouch事件的代码
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.gravity = Gravity.TOP | Gravity.LEFT;
mParams.x = 0;// 相对于屏幕原点的x轴距离
mParams.y = 0;// 相对于屏幕原点的y轴距离
mWM.addView(ivCursor, mParams);

    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.getRawX();
                y=event.getRawY();
                break;
            case MotionEvent.ACTION_MOVE:
                mx=event.getRawX();
                my=event.getRawY();
                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;
        }
    });

    然后问题就出现了 第一次去 down --move -- up 很正常 那个浮动框也跟着动 up之后也就停在了移动过后的位置 但是第二次 再去 down -- move 的时候 当出现move事件的时候那个浮动框就回到了刚开始的初始位置 然后再去跟着移动再停止  这是怎么回事啊 为什么会出现这样的情况啊 有没有大神帮忙解决下啊 很急!!

解决方案

这个是因为你在回调MotionEvent.ACTION_MOVE的方法里,mParams.x和mParams.y每次都是以原点为基准进行移动的,请用以下代码试试:

 private int mParamsX, mParamsY;
            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.getRawX();
                y=event.getRawY();  

                                // 先记录一下在手指按下时view所在位置
                                mParamsX = mParams.x;
                                mParamsX = mParams.x;
                break;
            case MotionEvent.ACTION_MOVE:
                mx=event.getRawX();
                my=event.getRawY();
                rx=mx-x;
                ry=my-y;
                mParams.x = mParamsX + (int) rx;
                mParams.y = mParamsY + (int) ry;
                mWM.updateViewLayout(ivCursor, mParams);
                break;
            case MotionEvent.ACTION_UP:
                break;
            }
            return true;
        }
    });

解决方案二:

你看看有没有其他的滑动监听,是不是焦点被抢夺了

解决方案三:

http://blog.csdn.net/lxk_1993/article/details/50725489

时间: 2024-09-22 19:55:56

java-关于ontouchlistener的监听问题的相关文章

java 标签组 鼠标监听

问题描述 java 标签组 鼠标监听 java标签组添加了鼠标监听,如何在鼠标点击时获得该标签的名字 解决方案 JLabel 不像按钮,要添加鼠标事件的话 用鼠标事件监听: JLabel jl = new JLabel(); jl.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e) { // 处理鼠标点击 } public void mouseEntered(MouseEvent e) { //

java 鼠标和按键监听都注册时。鼠标拖曳会触发按键监听的Ctrl键是怎么回事?

问题描述 java 鼠标和按键监听都注册时.鼠标拖曳会触发按键监听的Ctrl键是怎么回事? 我写的一程序.添加了按键监听和鼠标监听,各执行一个功能.当我按住鼠标左或右键拖曳的时候,触发了按键监听那里的事件.于是我就在按键监听类里用System.out.print(e.getKeyCode),打印出来是0x11(ctrl的键码). 解决方案 你的问题不太清晰. 什么怎么回事?? 不知道你想获取啥信息 解决方案二: 按理说不会,看下是不是你启动程序的时候朝程序发了什么按键,完全用鼠标来启动你的程序.

java代码-java中对键盘监听是不是一定要用到组件

问题描述 java中对键盘监听是不是一定要用到组件 能不能不用组件能编写一段代码直接在某一个时刻对键盘进行监听,有没有具体的源代码 解决方案 document.body.onkeypress=function()//键盘点击事件 { var code = window.event.keyCode;---得到键盘点击号..一般都用回车13 abc.. 97 98 99... ...下面添加代码就行了 code==? {function(){}}.. }

游戏-关于java如何实现按键监听动态绑定

问题描述 关于java如何实现按键监听动态绑定 public void keyPressed(KeyEvent e) { //按键键盘监听 int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_R: tc.tanks.clear(); tc.bullets.clear(); tc.trees.clear(); tc.otherWall.clear(); tc.homeWall.clear(); tc.metalWall.clear()

java-关于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 MotionEven

java Gui编程 事件监听机制

1.     GUI编程引言     以前的学习当中,我们都使用的是命令交互方式:        例如:在DOS命令行中通过javac java命令启动程序.     软件的交互的方式:      1. 命令交互方式           图书管理系统     2. 图形交互方式     ava提供了专业的API用于开发图形用户界面     GUI--> Graphic  User   Interface      将要了解GUI API的框架结构,以及GUI组件以及组件之间的关系,容器和布局管理

求救高手~!!!java 有没有异常监听

问题描述 我同事写了一个java的程序由于水平有限有很多冲突的按键经常会有异常发生我想让它发生异常时给用户一个友好的提示以免用户还在继续操作最后徒劳所以请问java里有没有一个能捕捉异常发生的方法只要有异常就弹出个提示框不要说trycatch他的代码太多了太乱了最好有个类似监听的东西这样一旦触发就能提示用户请高手指点下 解决方案

java基础-GUI的监听范围,主要是不知道放哪里

问题描述 GUI的监听范围,主要是不知道放哪里 如何给鼠标拖动的监听加一个方位?我用if没用.我是新手,希望大神说的仔细一点.我们现在在做吃鱼这个游戏

求助 java中的鼠标监听

问题描述 求教怎样实现:鼠标第一步,移动到一个按钮上第二步,等一段时间t第三步,单击按钮如果第一步和第三步的时间差t小于1秒,则执行事件一,否则执行事件二.不胜感谢! 解决方案 解决方案二:用swing还是awt还是swt?貌似做法不同的解决方案三:百度了一下mouseEntered()记录时间和单击的时间进行比较单击如果用swing是JButton.addactionListener(A类)A类implementsActionListener(一般前面还要加extendsJPanel)A类:@