解决scrollview上的menu拖动问题以及menu item在可视区外仍能触发的问题

时间:2022-10-22 16:21:26

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

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. nginx 之 grok 过滤

    简介   前面我们的nginx日志编码使用的json,logstash直接输入预定义好的 JSON 数据,这样就可以省略掉 filter/grok 配置,但是在我们的生产环境中,日志格式往往使用的是普 ...

  2. overflow:hidden清楚浮动的影响

    在网页布局中有时会遇到这种情况: 如果左边用<dt>,右边用<dd>,放在一行显示,<dt>要设置float:left,这个应该都知道,问题是,第一行这样做没有问题 ...

  3. Discuz X2任务开发

    简单描述 由于公司的需求要在系统中添加任务管理,用户通过完成任务而获得一定的奖励,因此其设计过程需要考虑到: 1.由于任务都是在系统中相关功能块处做一些相关事情,比如说在做题系统中完成指定的试题[1] ...

  4. 【风马一族&lowbar;Android】造作app的效果图

    一.墨刀 官网:https://modao.cc

  5. 超级MINI STLINK V2 官方固件自动升级 ST-Link 【worldsing 笔记】

    简介: 支持所有带SWIM接口的STM8系列单片机 支持所有带SWD接口的STM32系列单片机 完全兼容Keil,STVP,STVD,IAR,COSMIC,STM32 ST-LINK Utility! ...

  6. jQuery操作select option

    jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...

  7. hdu 5150 Sit sit sit

    http://acm.hdu.edu.cn/showproblem.php?pid=5151 直接判断是不是素数,然后再注意1就行. #include <cstdio> #include ...

  8. XMPP通讯开发-1

    有关XMPP的相关知识这里就不讲解了,网上有很多,这里我使用的NetBeans+Openire+smack搭建一个以XMPP协议的通讯工具,对于这部分知识我也不是很了解,也是初识吧,可能有些概念会混淆 ...

  9. (线性DP LIS)POJ2533 Longest Ordered Subsequence

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 66763   Acc ...

  10. Visual Studio安装SVN插件

    VS的SVN插件 材料 VS安装程序. VisualSVN安装程序,点击下载.  VisualSVN-5.0.1 前期准备 在代码管理的服务器上安装SVN server,可参考svn安装部署以及服务器 ...