android 半圆滚动菜单,自定义控件:实现半圆滚动菜单效果

前言

本自定义控件参考自鸿洋大神的自定义控件,基于原来的控件效果进行修改,着重实现了以下效果:位置自动修正以及滑动结束的回调。我们先来看看效果图:

116808_0.png

上面的图片是一个ImageView,与控件无关,是为了验证回调功能。接着是位置自动修正:

116808_1.gif

位置自动修正的意思是说,每个item view经过滑动后,停留的位置不是随意的,而是固定在某个区域之内,就如每个item view装在一个个格子里面。喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="滑动结束回调" src="/uploadfile/Collfiles/20160730/20160730092538750.gif" title="" />

而滑动结束的回调是说,当滑动结束后,滑动到中央的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 !&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值