2012-03-05 63 views
6

我正在使用視圖分頁器在Android中的視圖之間滑動。 現在我需要捕獲每個視圖的點擊事件。當我重寫觸摸偵聽器來捕獲輕擊事件時,滑動操作不會發生,並且屏幕保留在第一頁本身中。如何添加觸摸監聽器來查看傳呼機?如何在Android中查看尋呼機中的tap listener?

代碼:

viewPager.setOnTouchListener(new OnTouchListener(){ 

      @Override 
      public boolean onTouch(View v, MotionEvent event) 
      { 

        mDetector.onTouchEvent(event); 
        return true; 



      }}); 

對於上面的代碼,我能夠捕捉到輕擊事件,但刷卡操作變得不可能。

回答

2

南希,你不需要手動覆蓋Page swipe或touch事件。只需將頁面添加到ViewPager,ViewPager將自動處理滑動。

但是,您必須將觸摸偵聽器附加到每個頁面中的對象。因此,如果頁面1具有帶有許多按鈕的線性佈局,並且您需要找出何時單擊這些按鈕,則需要爲每個按鈕附加OnClickListeners。

是否讓我知道您的用例,以便我們能夠更好地理解,爲什麼您需要了解何時頁面被點擊!

+0

我需要顯示一個警告框,當屏幕鑑於尋呼機被竊聽。在這種情況下如何捕獲Tap事件。我的屏幕是一個帶有列表視圖的線性佈局。 – Nancy 2012-03-05 09:57:54

+0

您可以1.通過設置LinearLayout屬性android:clickable = true,然後在其上使用ClickListener或2.在ListView項上偵聽onItemClick,以偵聽點擊線性佈局(其中包含ListView)項目被點擊它可以去onItemClickListener http://goo.gl/iEcij – Soham 2012-03-05 10:08:47

4

我們可以使用手勢(Link1Link2):

public boolean onTouchEvent (MotionEvent ev) 

希望這有助於!

23

這裏,我離開你的一個片段從我的代碼來檢測「點擊」的OnTouchListener,我希望它能幫助

mImagePager.setOnTouchListener(new OnTouchListener() { 
     private float pointX; 
     private float pointY; 
     private int tolerance = 50; 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()){ 
      case MotionEvent.ACTION_MOVE: 
       return false; //This is important, if you return TRUE the action of swipe will not take place. 
      case MotionEvent.ACTION_DOWN: 
       pointX = event.getX(); 
       pointY = event.getY(); 
       break; 
      case MotionEvent.ACTION_UP: 
       boolean sameX = pointX + tolerance > event.getX() && pointX - tolerance < event.getX(); 
       boolean sameY = pointY + tolerance > event.getY() && pointY - tolerance < event.getY(); 
       if(sameX && sameY){ 
        //The user "clicked" certain point in the screen or just returned to the same position an raised the finger 
       } 
      } 
      return false; 
     } 
    }); 
+0

像魅力工程。 – 2013-07-05 09:15:59

+0

謝謝,也許如果你想要或需要你可以添加一個計時器,如果它在釋放觸摸之前需要一秒多的時間,那麼你可以決定不觸摸觸摸。 – 2013-07-05 13:21:00

+0

非常好的答案..他幫助我很多...非常感謝你 – asiya 2014-04-10 07:57:51

0

只需添加到喬治的偉大答案,您可以只使用距離,而不是SAMEX和Y一樣,這有點優雅。示例:

// Ignore events that are swipes rather then touches 
float distX = event.getX() - pointX; 
float distY = event.getY() - pointX; 
double dist = Math.sqrt(distX * distX + distY * distY); 
if (dist > tolerance) { 
    return false; 
} 
0

把click事件上viewPagerAdapter內viewpager的項目視圖的方法instantiateItem像 -

 @Override 
     public Object instantiateItem(ViewGroup container, final int position) { 

      // Declare Variables 
      ImageView jive_image; 

      inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View itemView = inflater.inflate(R.layout.list_item_viewpager, container, 
        false); 

      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        onBackPressed(); 
       } 
      }); 




      // Add viewpager_item.xml to ViewPager 
      ((ViewPager) container).addView(itemView); 

      return itemView; 
     } 
相關問題