8

Có vẻ như Samsung đã vô hiệu hóa việc ghi đè của họ (có thể do một bộ đồ của Apple).Samsung Galaxy S2 2.3.5+ không gọi overScrollBy()

Tôi có một thực hiện một cái nhìn mở rộng ScrollView và ghi đè

protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY,int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) 
    { 
    ... 
    return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, 0, metrics.widthPixels,isTouchEvent); 
    } 

Trên mỗi thiết bị khác (Gingerbread và lên tất nhiên), overScrollBy đang được gọi khi cuộn đạt nó kết thúc, và người dùng có thể thực sự ghi đè chế độ xem).

Trên Android 2.3.5+ Samsung đã triển khai một số loại cơ chế vô hiệu hóa ghi đè hoàn toàn (không chỉ thực hiện quá tải của họ, mà còn thực hiện của Android), và mỗi khi người dùng cố gắng ghi đè, sự kiện LogCat sau được in :

02-13 16:02:34.230: D/BounceScrollRunnableDefault(15783): run(), TimeFraction=0.5225, mBounceExtent=7.273352 

Có cách nào để mở khóa những gì Samsung đã làm ở đó không? Hoặc có thể một cách khác để tạo ra một overscroller?

+0

... thay thế bằng fiddler bên dưới hoạt động ... – Houston

Trả lời

3

Giải quyết vấn đề, tôi đã tạo OverScrollView của riêng tôi, bạn đều được chào đón để sử dụng nó. https://github.com/EverythingMe/OverScrollView

+0

Bất kỳ cơ hội nào bạn cũng có thể sửa lỗi này để làm việc cho ListViews? – VicVu

+0

ListView là một chế độ xem phức tạp hơn, cùng một bản vá sẽ không áp dụng cho nó, mặc dù tôi sẽ cập nhật nếu tôi có bất kỳ tin tức nào. – Rotemmiz

+0

Điều đó thật tuyệt vời, cảm ơn bạn. – VicVu

3

Tôi chỉ phải đối mặt với cùng một vấn đề và cuối cùng đã đưa ra phát hiện tùy chỉnh thanh cuộn sau:

listView.setOnTouchListener(new OnTouchListener() { 

     private static final float OVERSCROLL_THRESHOLD_IN_PIXELS = 70; 

     private float downY; 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      int firstVisibleItem = listView.getFirstVisiblePosition(); 
      int totalItemCount = listView.getCount(); 
      int visibleItemCount = listView.getChildCount(); 
      boolean onTop = firstVisibleItem == 0 && listView.getChildAt(0) != null && listView.getChildAt(0).getTop() == 0; 
      boolean onBottom = firstVisibleItem + visibleItemCount == totalItemCount && listView.getChildAt(visibleItemCount-1).getBottom() == listView.getHeight(); 

      if(onTop || onBottom) { 
       switch(event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        downY = event.getY(); 
        break; 
       case MotionEvent.ACTION_MOVE: 
        float deltaY = event.getY() - downY; 
        if(onTop && deltaY > OVERSCROLL_THRESHOLD_IN_PIXELS) { 
         // Top overscroll 
        } 
        if(onBottom && -deltaY > OVERSCROLL_THRESHOLD_IN_PIXELS) { 
         // Bottom overscroll 
        } 
        break; 
       } 
      } 

      return false; 
     } 
    }); 
+0

Tôi sẽ cố gắng điều này trong thời gian tới hạn. – VicVu

+0

hoạt động như một sự quyến rũ ... rất tốt. Cảm ơn bạn fiddler! – Houston

Các vấn đề liên quan