- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
而滑动结束的回调是说
而滑动结束的回调是说,当滑动结束后,滑动到中央的item view会触发一次回调,用户可以利用该回调来进行别的逻辑处理,与别的控件进行交互,比如:某个item view滑动到中央,触发回调,让别的TextView或者ImageView来具体显示该item项的具体信息。用法
只要在Activity中写上如下几行代码即可:
SemicircleMenu mSemicircleMenu = (SemicircleMenu) findViewById(R.id.circlemenu); mSemicircleMenu.setMenuItemIconsAndTexts(mItemImgs, mItemTexts); mSemicircleMenu.setOnMenuItemClickListener(new SemicircleMenu.OnMenuItemClickListener() { @Override public void itemClick(View view, int pos) { Toast.makeText(MainActivity.this, mItemTexts[pos], Toast.LENGTH_SHORT).show(); } }); mSemicircleMenu.setOnCentralItemCallback(new SemicircleMenu.OnCentralItemCallback() { @Override public void centralItemOperate(int pos) { imageView.setImageResource(mItemImgs[pos]); } });
布局文件:
(注意:clickable应该为true。)
实现原理
其实关于测量、布局、甚至事件分发的实现原理在原文章都有很详细的说明了,有兴趣的读者可以先阅读原文,这里会作简要的说明,本文重点在于讲述位置修正即滑动结束回调的实现,本文所有代码均作了删减,读者可直接到GitHub处阅读源码。
Part 1 设置itemView的内容及加载itemView /** * 每个Item之间相距的角度 */ private float mAngleDelay; /** * 设置菜单的文本信息 */ public void setMenuItemIconsAndTexts(int[] resIds,String[] texts) { mItemIcons = resIds; mItemTexts = texts; if(resIds == null texts == null) { throw new IllegalArgumentException(菜单文本和图片必须设置其一); } //初始化mMenuItemCount mMenuItemCount = resIds == null ? texts.length : resIds.length; if(resIds != null texts != null) { mMenuItemCount = Math.min(resIds.length,texts.length); } //计算每个Item之间相差的度数,该值直接影响后面的布局、滑动 mAngleDelay = 360 / mMenuItemCount; addMenuItems(); } private void addMenuItems() { LayoutInflater mInflater = LayoutInflater.from(getContext()); /** * 初始化item view */ for(int i = 0; i mMenuItemCount; i++) { final int j = i; View view = mInflater.inflate(R.layout.circle_menu_item,this,false); view.setTag(i); //为每个item view打上Tag ImageView iv = (ImageView) view.findViewById(R.id.id_circle_menu_item_image); TextView tv = (TextView) view.findViewById(R.id.id_circle_menu_item_text); //... addView(view); } }
从以上代码来看,暴露了setMenuItemIconsAndTexts方法,用户可以通过该方法为该控件设置不同的Item的图像及其文本信息。接着根据设置item的数量,来计算每个item之间应相隔多少度,即mAng
原创力文档


文档评论(0)