2014-03-03 63 views
1

我試圖將Goolge DFP旋轉木馬橫幅實現爲ListView。ListView中的Google DFP旋轉木馬橫幅

DFP輪播橫幅在技術上是帶有水平橫幅滑動條的WebView。 (adTag:/ 6253334/dfp_showcase/carousel)

它的工作原理是,我可以垂直滾動並通過點擊打開廣告。

但是,當我開始在Carousel視圖上水平滾動(通過ListView項目)時,橫幅將自動點擊(它不應該)。 但是,只有當我開始用手指在傳送帶物品上滾動水平滾動時,纔會發生這種情況,而不是在垂直滾動滾動物品時滾動。

有沒有辦法阻止將此觸摸發送到AdView? 奇怪的是也,雖然AD-Link的打開我能夠滾動槽列表視圖... 我試圖把橫幅到定製LinearView:

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 

    switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      xDistance = yDistance = 0f; 
      lastX = ev.getX(); 
      lastY = ev.getY(); 

      break; 
     case MotionEvent.ACTION_MOVE: 
      final float curX = ev.getX(); 
      final float curY = ev.getY(); 
      xDistance += Math.abs(curX - lastX); 
      yDistance += Math.abs(curY - lastY); 
      lastX = curX; 
      lastY = curY; 
      if(yDistance > xDistance) 
       return true; 
    } 
    return super.onInterceptTouchEvent(ev); 
} 

但橫幅後,立即打開動作網址ACTION_DOWN傳遞給onInterceptTouchEvent

這是使用Google Carousel

代碼我怎樣才能解決這個問題?

回答

0

我檢測到了問題。 ListView向WebView發送取消觸摸事件。 Google代碼處理點擊取消事件。

因此,我改變谷歌的JavaScript代碼無法處理「touchcancel」事件作爲點擊:

// If a scroll moves < snapThreshold, consider it a tap. 
Carousel.prototype.onTouchEnd = function (e) { 

    // If onTouchEnd was triggered by mouseout, ignore tap. 
    if (e.type === 'mouseout') { 
     return; 
    } 
    //if touch cancel was triggered, ignore tap 
    if (e.type === 'touchcancel') { 
     return; 
    } 

    if (this.scrolledOut) { 
     // Prevent clicks if we've already scrolled out. 
     var preventClick = function() { 
      e.stopPropagation(); 
      e.target.removeEventListener('click', preventClick, false); 
     }; 
     e.target.addEventListener('click', preventClick, false); 
     this.scrolledOut = false; 
     this.onSwipe(); 
    } 
    ....