我尝试将Goolge DFP广告管理系统轮播标题实施到ListView。
DFP广告管理系统轮播横幅广告在技术上是一个带有水平横幅滑块的WebView。 (adTag:/ 6253334 / dfp_showcase / carousel)
它可以工作,我可以垂直滚动并通过点击打开广告。
但是当我开始在Carousel View上水平滚动(通过ListView项目)时,会自动点击横幅(它不应该点击)。 但是只有当我开始用手指在旋转木马项目上水平滚动时才会发生这种情况,而不是在通过旋转木马项目垂直滚动时。
有没有办法阻止将此触摸发送到AdView? 奇怪的是,当AD-Link打开时,我可以通过列表视图滚动... 我试图将Banner放入自定义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
后立即打开操作网址。
我该如何解决这个问题?
答案 0 :(得分: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();
}
....