2010-10-08 47 views
3

我有一個圖像視圖,它可以拖拽並縮放,但現在我還需要在我的圖像視圖上放置setOnLongClickListner。我已經這樣做了,但它不起作用。但是當我禁用ontouch事件時,它開始工作。有誰可以告訴我如何解決這個問題。 這裏是我的代碼android setOnLongClickListner不能與onTouch事件一起工作

image.layout(0, 30, screenWidth, screenHeight - 30); 
    image.setScaleType(ImageView.ScaleType.FIT_XY); 


    params = new RelativeLayout.LayoutParams(screenWidth, screenHeight - 30); 
    params.leftMargin = 0; 
    params.topMargin = 30; 


    layout.addView(image, params); 

    image.setOnLongClickListener(new View.OnLongClickListener() { 
     public boolean onLongClick(View v) { 


      Log.i("its working", "its working"); 

      return true; 
        } 
    }); 

    image.setOnTouchListener(this); 

我,會是非常感激的。

非常感謝。

+1

我們展示的代碼:當您設置監聽器,與ImageView的相關監聽器和裏面的任何代碼。另外,我認爲touch事件在onLongClick之前。可能onClickEvent並未被解僱,因爲它被onTouchListener使用。 – Maragues 2010-10-08 10:50:11

回答

1

我認爲該對象可以有一個onClick或onTouch,它會使用最後一個定義的。我最近在我的一些應用程序中也注意到了這一點。

2

按照developer docs

返回從這些事件偵聽器,真正將停止事件其它事件偵聽器的傳播,也將阻止回調的View.So默認的事件處理程序可以肯定,你要終止的事件,當你返回true

因此,也許在返回的方法來處理事件會帶給你更接近了一步,你想要什麼false實現

1

我試過了「返回false」。它會觸發他們兩個。對於以下示例,它將在標題上顯示不同的消息。

public boolean onTouch(View v, MotionEvent event) { 
     // TODO Auto-generated method stub 
      int ea=event.getAction();          

      switch(ea){              
      case MotionEvent.ACTION_MOVE:         
      int l=v.getLeft();          
      int b=v.getBottom();          
      int r=v.getRight();          
      int t=v.getTop(); 
      String message = "l:"+l + "t:" + t+ 
      "r:"+r + "b:"+ b; 
      this.setTitle(message);          
      } 
      return false; 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
     this.setTitle("Click"); 
} 

@Override 
public boolean onLongClick(View arg0) { 
    // TODO Auto-generated method stub 
    this.setTitle("Long Click"); 
    return false; 
} 
1

它的搜索和嘗試,並錯誤希望以後的工作我都沒好與您合作

在XML 1加android:clickable="true"到ImageView的

2,在您的活動或視圖,使一定要return false ;

imageView.setOnTouchListener(new OnTouchListener() { 
     @TargetApi(11) 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub   
       Log.v(TAG, "Touched Here"); 
       return false; 
     } 
    }); 

3-接下來和最後一步一定要return true;

imageView.setOnLongClickListener(new OnLongClickListener() { 

     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 
      Log.v(TAG, "Long Pressed Here"); 
      return true; 
      }   
     }); 

它會起到了很好的觸摸並長按

+0

onTouchListener將不會收到隨後的UP事件。 – 2014-04-18 09:16:52