2012-03-05 26 views
6

Tôi đang sử dụng trình xem trang để vuốt giữa các chế độ xem trong Android. Bây giờ tôi cần chụp sự kiện nhấn cho từng chế độ xem. khi tôi ghi đè trình xử lý cảm ứng để nắm bắt sự kiện nhấn, thao tác vuốt không xảy ra và màn hình vẫn ở trong trang đầu tiên. Làm cách nào để thêm trình xử lý cảm ứng để xem máy nhắn tin?Làm cách nào để bật trình nghe nhạc nhấn trong máy nhắn tin lượt xem trong Android?

Code:

viewPager.setOnTouchListener(new OnTouchListener(){ 

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

        mDetector.onTouchEvent(event); 
        return true; 



      }}); 

Đối với các mã trên tôi có thể nắm bắt được sự kiện vòi nước, nhưng hành động swipe trở thành Impossible.

Trả lời

2

Nancy, bạn không cần ghi đè thủ công các lần vuốt trang hoặc các sự kiện chạm. Chỉ cần thêm các trang vào ViewPager và ViewPager sẽ tự động xử lý việc vuốt.

Tuy nhiên, bạn phải đính kèm trình nghe cảm ứng vào đối tượng trong mỗi trang. Vì vậy, nếu Trang 1 có Bố cục Tuyến tính với nhiều nút và bạn cần tìm hiểu khi nào các nút đó được nhấp, bạn cần phải đính kèm OnClickListeners cho từng nút đó.

Hãy cho tôi biết trường hợp sử dụng của bạn để chúng tôi có thể hiểu rõ hơn, tại sao bạn cần tìm hiểu khi nào một trang đã được nhấp!

+0

tôi cần phải hiển thị một hộp cảnh báo khi màn hình được khai thác theo quan điểm pager . Làm cách nào tôi có thể nắm bắt sự kiện Nhấn trong trường hợp này. màn hình của tôi là bố trí tuyến tính với chế độ xem danh sách trong đó. – Nancy

+0

Bạn có thể 1. lắng nghe các nhấp chuột trên linearlayout (có chứa ListView) bằng cách đặt thuộc tính LinearLayout android: clickable = true và sau đó sử dụng ClickListener trên nó hoặc 2. lắng nghe onItemClick trên một mục ListView, để khi mục được nhấp vào nó có thể đi đến onItemClickListener http://goo.gl/iEcij – Soham

4

Chúng ta có thể sử dụng Gestures (Link1, Link2):

public boolean onTouchEvent (MotionEvent ev) 

Hope this helps!

23

Ở đây tôi để lại cho bạn một đoạn mã từ mã của tôi để phát hiện một "click" trên OnTouchListener, tôi hy vọng nó sẽ giúp

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

Hoạt động như sự quyến rũ. –

+0

cảm ơn bạn, và có thể nếu bạn muốn hoặc cần bạn có thể thêm một bộ đếm thời gian và nếu phải mất hơn một giây trước khi nó phát hành các liên lạc hoặc một cái gì đó sau đó bạn có thể quyết định không cháy liên lạc. –

+0

câu trả lời rất tốt .. nó đã giúp tôi rất nhiều ... cảm ơn bạn rất nhiều – asiya

0

Chỉ cần để thêm vào câu trả lời tuyệt vời Jorge, bạn có thể chỉ cần sử dụng khoảng cách thay vì sameX và sameY, đó là một chút thanh lịch hơn. Mẫu:

// 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

Đặt sự kiện click vào xem mục tương ứng của ViewPager bên trong viewPagerAdapter trong phương pháp instantiateItem như -

 @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; 
     } 
Các vấn đề liên quan