android 开发卫星菜单,android之类似卫星菜单,来自定义ViewGroup。。。。。
这是一个继承ViewGroup的自定义控件,对于高手来说比较简单,但对于我们这样的小白,确实是一个不错的demo
定义继承ViewGroup的自定义View ,需要实现它的两个基本方法, onMeasure和onLayout,我们在onMeasure中测量控件的大小,在onLayout中设置控件所在的位置。>我们知道在onMeasure中有3中模式,在本例子中由于设置的是match_parent,所以就根据系统测量的size来设定,本例子的onMeasure比较简单,就是测量子控件
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
for (int i = 0; i < getChildCount(); i++) {
View childView = getChildAt(i);
measureChild(childView, widthMeasureSpec, heightMeasureSpec);
}
}
主要就是布局,不过本例子,布局也比较简单,先将主menubtn的位置放好,
menuBtn = getChildAt(0);
menuBtn.setOnClickListener(this);
int width = menuBtn.getMeasuredWidth();
int height = menuBtn.getMeasuredHeight();
ml = getMeasuredWidth() - width - OFFSET;
mt = getMeasuredHeight() - height - OFFSET * 3;
menuBtn.layout(ml, mt, getMeasuredWidth() - OFFSET, getMeasuredHeight() - OFFSET * 3);
在循环遍历子view放置子控件, 这个比较随意,可以根据自己的喜好,随意的放置子控件,在这里我用的是一条直线,
for (int i = 0; i < getChildCount() - 1; i++) {
View childView = getChildAt(i + 1);
childView.setVisibility(View.GONE);
int cWidth = childView.getMeasuredWidth();
int cHeight = childView.getMeasuredHeight();
int average = getMeasuredWidth() / getChildCount();
int ct = mt - average * (i + 1);
childView.layout(ml + OFFSET / 2, ct, ml + cWidth + OFFSET / 2, ct + cHeight);
}
最后就是设置 主btn的点击事件,以及动画的设置,这也是一个难点,不过,看你像要实现什么样的动画了,简单的动画,还是比较简单的。
private void toggleMenu(int duration) {
for (int i = 0; i < getChildCount() - 1; i++) {
final View childView = getChildAt(i + 1);
childView.setVisibility(View.VISIBLE);
int average = getMeasuredWidth() / getChildCount();
int ct = average * (i + 1);
AnimationSet animationSet = new AnimationSet(true);
TranslateAnimation translateAnimation = null;
if (mStatus == Status.CLOSE) {// to open
translateAnimation = new TranslateAnimation(0,
0, ct, 0);
childView.setClickable(true);
childView.setFocusable(true);
} else {
translateAnimation = new TranslateAnimation(0,
0, 0, ct);
childView.setClickable(false);
childView.setFocusable(false);
}
translateAnimation.setDuration(duration);
translateAnimation.setFillAfter(true);
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if (mStatus == Status.CLOSE) {
childView.setVisibility(View.GONE);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
RotateAnimation rotateAnimation=new RotateAnimation(0,720, Animation.RELATIVE_TO_SELF,
0.5f,Animation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(duration);
rotateAnimation.setFillAfter(true);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(translateAnimation);
childView.startAnimation(animationSet);
final int pos=i+1;
childView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (itemClickListener != null)
itemClickListener.onClick(childView, pos);
menuItemAnimation(pos - 1);
changeStatus();
}
});
}
//切换菜单状态
changeStatus();
}
最后不要忘了,切换按钮的状态。
本例子还有个就是监听事件的回调,我想这个大家都会把。还是比较简答的。
由于不会制作gif动画,就用下面的两张静态的凑合着吧,有会制作gif的简便方法吗?
求告诉
具体源码下载地址 : http://download.csdn.net/detail/qq_21840193/8977311 点击打开链接
Github下载地址 : https://github.com/sweethearting/ArcMenu
android 开发卫星菜单,android之类似卫星菜单,来自定义ViewGroup。。。。。相关推荐
- Android 开发工具集合 - (Android Dev Tools)
收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. 欢迎大家推荐自己在Android开发过程中用的好用的工具. ...
- 老罗Android开发视频教程( android解析json数据 )4集集合
老罗Android开发视频教程( android解析json数据 )4集集合 老罗Android开发视频教程( android解析json数据 ) 第一集android解析json数据 http:// ...
- [android开发必备]Android开发者社区汇总
[android开发必备]Android开发者社区汇总 经常收到很多人问做android开发去哪个社区,每次都回答的零零碎碎的很比系统,今天统一整理下,把截至目前为止有价值的android开发社区汇总 ...
- 视频教程-快速入门Android开发 视频 教程 android studio-Android
快速入门Android开发 视频 教程 android studio 任苹蜻,爱学啊创始人 & CEO,曾就职于某二车手公司担任Android工程师后离职创办爱学啊,我们的宗旨是:人生苦短,我 ...
- 全网最全Android开发工具,Android开发框架大全
涵盖Android方方面面的技术, 目前保持更新. 时刻与Android开发流行前沿同步. 目录 一.工具 Android开发工具 在线工具宝典大全 二.框架 *缓存框架* DiskLruCache ...
- Android开发工具视频Android 12(S)准备
Android开发工具视频Android 12(S)准备 适配步骤 下载最新的Android studio工具,点我到官网下载最新的吧! 最新版的studio规定jdk使用必须至少11,所以请移步下载 ...
- Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材
AndroidDevTools AndroidSDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6:mirrors.opencas.cn端口:80 IPV4/IPV6:mirr ...
- Ubuntu(Deepin)搭建Android开发环境(Android Studio)
前言: 最近项目完成得差不多了,有些空闲于是装了基于ubuntu的Deepin玩玩,感觉挺好的,于是尝试用它来作为开发的系统,接下来就是要搭建android的开发环境,但是看了好多都是很老的,IDE是 ...
- 【android开发】:android真机测试
1. android platform-tools下载 1.1 下载路径 https://developer.android.com/studio/releases/platform-tools.ht ...
- Android开发规范[Java+android]
说明:该文档由阿里<Java开发规范>和<Android开发规范>整理而来 [强制]必须遵守,违反本约定或将会引起严重的后果: [推荐]尽量遵守,长期遵守有助于系统稳定 ...
最新文章
- FastAI 课程学习笔记 lesson 1:宠物图片分类
- Unity学习笔记2 简易2D横版RPG游戏制作(二)
- Python 中的匿名函数,你会用吗
- jquery 简单日历
- 【2016年第6期】俄罗斯跨境数据流动立法规则与执法实践
- JAVA获取图片的宽、高和大小
- C++20 即将于年底发布,C++ 23 提上日程!
- java学习笔记七——继承
- 免费python全套教程-0基础学python 全套教程送你参考
- 公元2011年6月20日,我在博客园安家了,大家祝贺吧!
- 实时判断数据流中的第K大元素
- 计算机管理的磁盘管理简单卷,win7磁盘管理分区后无法新建简单卷怎么解决
- win10右键卡顿原因_win10系统右键卡顿的解决方法
- 一级化学反应多步骤Fluent仿真文献复现(三维、多孔介质催化剂表面反应)
- 示波器电源测试交流耦合的陷阱
- 人工智能——搜索策论2
- ftp服务器怎么添加文件夹,批量建立文件夹,为Serv_U批量创建用户
- 1271:圆柱体的表面积
- 电脑无限重启 服务器,Windows10系统开机提示无法连接到sens服务无限重启如何解决...
- HTML基础教学课件,HTML基础课件.ppt