最近在做项目发现一个让人很头疼的问题

qiick-3.5 引擎 lua 版本

一 问题如下:

① 在Cocostudio中做界面 使用 scrollview 控件 ,然后 scrollview 控件的 item 点击事件 是 ImageView

② 当拖动 scrollview 的时候会 触发 item 的点击事件,照成体验及其的差。

 

二 解决方案

① 重写 imageview的 点击事件 添加一个成员变量

② 实现基本原理:

    1.首先判断当前imageview 是否接收了吞噬事件。如果不吞噬事件然后再进行事件阻断操作。

    2.将点击的起始坐标 转化成世界坐标 然后对比 点击结束后的坐标 如果 位置不一致 就不派发 点击事件

public:

  virtual bool onTouchBegan(Touch *touch, Event *unusedEvent);

virtual void onTouchEnded(Touch *touch, Event *unusedEvent);

private:

Vec2 _touchBeganWorldPosition;

② 方法实现

bool ImageView::onTouchBegan(Touch *touch, Event *unusedEvent)

{

_hitted = false;

if (isVisible() && isEnabled() && isAncestorsEnabled() && isAncestorsVisible(this) )

{

_touchBeganPosition = touch->getLocation();

bool isSwallowTouches = this->isSwallowTouches();

if (!isSwallowTouches)

{

_touchBeganWorldPosition = convertToWorldSpace(_touchBeganPosition);

}

if(hitTest(_touchBeganPosition) && isClippingParentContainsPoint(_touchBeganPosition))

{

_hitted = true;

}

}

if (!_hitted)

{

return false;

}

setHighlighted(true);

/*

* Propagate touch events to its parents

*/

if (_propagateTouchEvents)

{

this->propagateTouchEvent(TouchEventType::BEGAN, this, touch);

}

pushDownEvent();

return true;

}

void ImageView::onTouchEnded(Touch *touch, Event *unusedEvent)

{

_touchEndPosition = touch->getLocation();

bool isSwallowTouches = this->isSwallowTouches();

if(!isSwallowTouches){

Vec2 newWorldPos = convertToWorldSpace(_touchEndPosition);

const static float kMenuMinMove = 2;

if (fabs(newWorldPos.x - _touchBeganWorldPosition.x)>kMenuMinMove || fabs(newWorldPos.y-_touchBeganWorldPosition.y)>kMenuMinMove)

{

return;

}

}

/*

* Propagate touch events to its parents

*/

if (_propagateTouchEvents)

{

this->propagateTouchEvent(TouchEventType::ENDED, this, touch);

}

bool highlight = _highlight;

setHighlighted(false);

if (highlight)

{

releaseUpEvent();

}

else

{

cancelUpEvent();

}

}

用了以上的方法后,效果实现。

方法参考网址:http://blog.csdn.net/n5/article/details/38266855

解决scrollview上的menu拖动问题以及menu item在可视区外仍能触发的问题的更多相关文章

  1. 解决TableView / ScrollView上的Menu问题(1滑出View区域还可点击2导致点击menu后View不能滑动)

    解决TableView / ScrollView上的Menu问题 1划出区域还可点击 重写CCMenu的触摸事件函数 TouchBegin/TouchMove/TouchCancle/TouchEnd ...

  2. Android 解决ScrollView下嵌套ListView进页面不在顶部的问题

    以下为整理: 方法1 刚开始还可以,后来再调试时就不行了. 为了解决scrollview和listview冲突  设置了listview的高度   结果进页面就不是在顶部了 . 解决方案1:Scrol ...

  3. Android在开发中的使用技巧之解决ScrollView嵌套RecyclerView出现的系列问题

    根据已上线的app里总结出来的实用小技巧 相信大家都遇到过ScrollView嵌套RecyclerView或者RecyclerView嵌套RecyclerView来使用, 也会遇到一堆奇奇怪怪的问题, ...

  4. 解决scrollView中嵌套编辑框导致不能上下滑动的问题

    EditText设置maxLines之后,文本行数超过maxLines,会网上折叠,上下滑动能够浏览全部文本. 若EditText外层有scrollView.在EditText上下滑动,不会像正常情况 ...

  5. 改动ScrollView的滑动速度和解决ScrollView与ViewPager的冲突

    话不多说,非常easy,能够从凝视中知道做法,直接上代码: 1.改动ScrollView的滑动速度: public class MyHorizontalScrollView extends Horiz ...

  6. 一个简单的Shell脚本(解决windows上文本在macos上乱码问题)

    之所以有这一篇文章,是因为之前我写过的一篇文章:“解决Mac上打开txt文件乱码问题”:传送门: https://www.cnblogs.com/chester-cs/p/11784079.html ...

  7. 解决ScrollView嵌到listView冲突问题

    方法一: 把下面的方法放在绑定适配器操作的下面就行. /** * 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题 * @ ...

  8. URLRedirector 解决网页上无法访问 google CDN 的问题(fonts、ajax、themes、apis等)

    URLRedirector 解决网页上无法访问 google CDN 的问题(fonts.ajax.themes.apis等) 由于某些原因,在访问国外的网站时有时候会特别慢,像 stackoverf ...

  9. 解决ScrollView嵌套ViewPager出现的滑动冲突问题

    /**       *         解决ScrollView嵌套ViewPager出现的滑动冲突问题       */       public class ScrollView1 extends ...

随机推荐

  1. Linux C 中 fork() 函数详解

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...

  2. composer的安装以及laravel框架的安装(一)

    laravel号称世界上最好的php框架,没有之一,下面介绍它的安装 laravel学习交流qq群:293798134 composer的安装 : php开发者很多,并且在web开发领域占据绝对统治地 ...

  3. migration integer limit option

    https://gist.github.com/stream7/1069589 :limit Numeric Type Column Size Max value 1 tinyint 1 byte 1 ...

  4. word20161215

    name / 名称 name mapping / 名称映射 name resolution / 名称解析 name server (NS) resource record / 名称服务器资源记录 na ...

  5. 字符串专题:KMP POJ 3561

    http://poj.org/problem?id=3461 KMP这里讲的不错next的求法值得借鉴 http://blog.sina.com.cn/s/blog_70bab9230101g0qv. ...

  6. springMVC和spring各自扫描自己的注解不要相互混淆

    1.问题 执行 entityManager.flush();  总是报错:javax.persistence.TransactionRequiredException: no transaction ...

  7. mui问题

    2016.7.27 1.当你的html不在文件夹的时候 引路径就不要加../   2.当用svn提交代码的时候要先右键项目->版本管理->与资源库同步,查看你的修改的地方和原来部署上去的文 ...

  8. .NET LINQ 生成操作

    生成操作      生成是指创建新的值序列. 方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表达式语法 更多信息 DefaultIfEmpty 将空集合替换为具有默认值的单一 ...

  9. 一个漂亮的上传按钮input[type=file]

    ;;} <div class="input-group xj-file xj-panel-top"> <span class="input-group- ...

  10. Nginx与Apache的比较

    Nginx与Apache的比较 Nginx相对于Apache的优点 轻量级.同样起web服务,比apache占用更少的资源和内存 抗并发.nginx处理请求是异步非阻塞,而apache则是阻塞型.在高 ...