2014-12-31 59 views
0

我有一個imageview,我在其上設置了OnLongClickListener。同時,我正在偵聽Activity通用OnTouchEvent。我希望能夠檢測到長時間點擊視圖,並且他們開始使用onTouchEvent MOVE動作移動它。onLongClick之後的OnTouchEvent

問題是,如果我長按然後拖動我的手指,OnTouchEvent不會被調用。我必須擡起手指,然後再次按下OnTouchEvent進行操作。

我試過返回true並返回false onLongClick但沒有運氣。

任何原因?

編輯:代碼添加澄清

MainActivity A extends Activity implements OnLongClickListener{ 


    public void onCreate(){ 
    super.OnCreate(); 
    setContentView(R.layout.myLayout); 
    ImageView iv = (ImageView) findViewById(R.id.myImage; 
    iv.setOnLongClickListener(); 
    } 

    public Boolean OnLongClick(View v){ 
    Log.i("On Long Click activated"); 
    return true; 
    } 
    public Boolean OnTouchEvent(MotionEvent event){ 
    Log.i("OnTouch event activated"); 
    return super.OnTouchEvent(); 
    } 

所以從上面的代碼,如果你長時間點擊美景,不擡起手指那麼只有以下日誌將移動你的手指(甚至視圖外)顯示: 「在長按啓動」

+0

請張貼一些代碼,你試過它 –

+0

希望我的理解正確,從你的話,它不是你在'onTouchEvent'之後調用'OnLongClickListener'。但是,當你簡單的觸摸意味着只有'onTouchEvent'事件應該調用,當長時間點擊時,只有'OnLongClickListener'應該調用。 – Mobi

+0

我添加了代碼以供參考。 – Snake

回答

0

我有你的問題

//var 
float dX, dY ; 
yourImageView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.d(TAG,"onTouch"); 
      Display display = getWindowManager().getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      float right = size.x - yourImageView.getWidth(); 
      float bottom = size.y - yourImageView.getHeight() * 1.5f; 
      switch (event.getAction()) { 

       case MotionEvent.ACTION_DOWN: 
        Log.d(TAG,"actionDown"); 

        dX = yourImageView.getX(); 
        dY = yourImageView.getY(); 
        Log.d(TAG, "Valores: " + String.valueOf(dX) + " " + String.valueOf(dY)); 
        return true; 
       case MotionEvent.ACTION_MOVE: 
        Log.d(TAG,"actionMove"); 

        yourImageView.animate() 
          .x(event.getRawX() - yourImageView.getWidth()) 
          .y(event.getRawY() - yourImageView.getHeight()) 
          .setDuration(0) 
          .start(); 
        return true; 

       case MotionEvent.ACTION_UP: 
        Log.d(TAG,"actionUp"); 
        if(dX == yourImageView.getX() && dY == yourImageView.getY()){ 
         onclick_yourImageView(v); // this is the event todo when you click over image 
         return true; 
        } 
        if (yourImageView.getY() > 1000) { 
         float left = event.getRawX(); 
         if (left < 0) { 
          left = 0; 
         } 
         yourImageView.animate() 
           .x(left - yourImageView.getWidth()) 
           .y(bottom) 
           .setDuration(200) 
           .start(); 
        } else if (yourImageView.getX() < size.x/2) { 
         yourImageView.animate() 
           .x(0) 
           .y(event.getRawY() - yourImageView.getHeight()) 
           .setDuration(400) 
           .start(); 
        } else { 
         yourImageView.animate() 
           .x(right) 
           .y(event.getRawY() - yourImageView.getHeight()) 
           .setDuration(400) 
           .start(); 
        } 
        return true; 
       default: 
        return false; 
      } 
     } 
    }); 

的答案在你的proyect當這個代碼粘貼Ø只需單擊圖像的位置不變,併爲此rareason做方法onclick_yourImageView(v);