import android.app.Activity;
import android.view.MotionEvent;/**
 */
public class MainActivity extends Activity {
    protected void onCreate(android.os.Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    };    /**
     * {@inheritDoc}
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();        System.out.println("坐标:" + x + "," + y);        return super.onTouchEvent(event);
    }
}
怎么实现即使按住一个地点不动,也能持续不断的显示按键的位置

解决方案 »

  1.   

    ACTION_DOWN只发一次。所以思路是,在action_down的时候,启动一个timer,然后action_move,action_up, action_cancel的时候,取消掉这个timer.个人觉得,没必要这样做,你在action_down的时候显示的坐标,如果后面没有action来的话,说明坐标没有动,也就没有必要启动一个timer了
      

  2.   

    屏幕上的一个点(像素值)不是一个手指可以精确的按到的,一般一个手指可以按住N个点,因为手指相对于屏幕上的一个点来说是非常大了。所以onTouch事件会把所有被触到的点都显示,并且只要当前的点与上一次的点不同就会继续显示。
      

  3.   

    能具体说一下么?我启动了之后依旧是死机。import android.app.Activity;
    import android.os.Handler;
    import android.util.Log;
    import android.view.MotionEvent;/**
     */
    public class MainActivity extends Activity
    {
        private float x;
    private float y;
    private Handler mHandler =  new Handler();    protected void onCreate(android.os.Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        };    /**
         * {@inheritDoc}
         */
        @Override
        public boolean onTouchEvent(MotionEvent event)
        {
         if(event.getAction()==MotionEvent.ACTION_DOWN)
         {
         x = event.getX();
         y = event.getY();
         mHandler.post(mRunnable);   
         }
         else
         {
         mHandler.removeCallbacks(mRunnable);
         super.onDestroy();  
         }
            return false;
        }
        
        
        private Runnable mRunnable = new Runnable()
        {  
            public void run()
            {  
                //为了方便 查看,我们用Log打印出来  
               while(true)
               {
                System.out.println("坐标:" + x + "," + y);
               }
            }  
        };   
        
        @Override 
        protected void onDestroy() {  
            //将线程销毁掉  
            mHandler.removeCallbacks(mRunnable);  
            super.onDestroy();  
        }  

    然后就会死机////
      

  4.   


    大哥,你用while(true)...........................不死机才怪
      

  5.   

    ....
    为何感觉这代码这么暴力...
    楼主单片机出身的么....Timer timer = new Timer(true);
    TimerTask task=new TimerTask (){
         @Override
         public void run() {
         System.out.println("坐标:" + x + "," + y);//你喜欢System.out那就不Log.d了...
         }
            };
    public boolean onTouchEvent(MotionEvent event){
       x = event.getX();
       y = event.getY();
       switch(event.getAction()){
       case MotionEvent.ACTION_DOWN:
          timer.scheduleAtFixedRate(task, 100, 100);
          return false;
          break;
       case MotionEvent.ACTION_MOVE:
          
          return false;
          break;
       case MotionEvent.ACTION_UP:
          timer.cancel();
          timer = new Timer(true);
          return true;
          break;
       }
            
    }