这是一个继承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。。。。。相关推荐

  1. Android 开发工具集合 - (Android Dev Tools)

    收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. 欢迎大家推荐自己在Android开发过程中用的好用的工具. ...

  2. 老罗Android开发视频教程( android解析json数据 )4集集合

    老罗Android开发视频教程( android解析json数据 )4集集合 老罗Android开发视频教程( android解析json数据 ) 第一集android解析json数据 http:// ...

  3. [android开发必备]Android开发者社区汇总

    [android开发必备]Android开发者社区汇总 经常收到很多人问做android开发去哪个社区,每次都回答的零零碎碎的很比系统,今天统一整理下,把截至目前为止有价值的android开发社区汇总 ...

  4. 视频教程-快速入门Android开发 视频 教程 android studio-Android

    快速入门Android开发 视频 教程 android studio 任苹蜻,爱学啊创始人 & CEO,曾就职于某二车手公司担任Android工程师后离职创办爱学啊,我们的宗旨是:人生苦短,我 ...

  5. 全网最全Android开发工具,Android开发框架大全

    涵盖Android方方面面的技术, 目前保持更新. 时刻与Android开发流行前沿同步. 目录 一.工具 Android开发工具 在线工具宝典大全 二.框架 *缓存框架* DiskLruCache ...

  6. Android开发工具视频Android 12(S)准备

    Android开发工具视频Android 12(S)准备 适配步骤 下载最新的Android studio工具,点我到官网下载最新的吧! 最新版的studio规定jdk使用必须至少11,所以请移步下载 ...

  7. Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材

    AndroidDevTools AndroidSDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6:mirrors.opencas.cn端口:80 IPV4/IPV6:mirr ...

  8. Ubuntu(Deepin)搭建Android开发环境(Android Studio)

    前言: 最近项目完成得差不多了,有些空闲于是装了基于ubuntu的Deepin玩玩,感觉挺好的,于是尝试用它来作为开发的系统,接下来就是要搭建android的开发环境,但是看了好多都是很老的,IDE是 ...

  9. 【android开发】:android真机测试

    1. android platform-tools下载 1.1 下载路径 https://developer.android.com/studio/releases/platform-tools.ht ...

  10. Android开发规范[Java+android]

    说明:该文档由阿里<Java开发规范>和<Android开发规范>整理而来  [强制]必须遵守,违反本约定或将会引起严重的后果:  [推荐]尽量遵守,长期遵守有助于系统稳定 ...

最新文章

  1. FastAI 课程学习笔记 lesson 1:宠物图片分类
  2. Unity学习笔记2 简易2D横版RPG游戏制作(二)
  3. Python 中的匿名函数,你会用吗
  4. jquery 简单日历
  5. 【2016年第6期】俄罗斯跨境数据流动立法规则与执法实践
  6. JAVA获取图片的宽、高和大小
  7. C++20 即将于年底发布,C++ 23 提上日程!
  8. java学习笔记七——继承
  9. 免费python全套教程-0基础学python 全套教程送你参考
  10. 公元2011年6月20日,我在博客园安家了,大家祝贺吧!
  11. 实时判断数据流中的第K大元素
  12. 计算机管理的磁盘管理简单卷,win7磁盘管理分区后无法新建简单卷怎么解决
  13. win10右键卡顿原因_win10系统右键卡顿的解决方法
  14. 一级化学反应多步骤Fluent仿真文献复现(三维、多孔介质催化剂表面反应)
  15. 示波器电源测试交流耦合的陷阱
  16. 人工智能——搜索策论2
  17. ftp服务器怎么添加文件夹,批量建立文件夹,为Serv_U批量创建用户
  18. 1271:圆柱体的表面积
  19. 电脑无限重启 服务器,Windows10系统开机提示无法连接到sens服务无限重启如何解决...
  20. HTML基础教学课件,HTML基础课件.ppt

热门文章

  1. 688:画圈游戏(思维)
  2. 玩转ECS第6讲 | 弹性计算Region化部署和跨可用区容灾介绍
  3. 他来了他来了!阿里云混合云全新升级高燃来袭!
  4. 如何用架构师思维解读区块链技术?
  5. linux下多个db2,Linux下安装多个DB2副本
  6. python字典遍历取值_Python中字典的使用
  7. .NET 之路 | 007 详解 .NET 程序集
  8. 像素游戏的动态光影效果
  9. 以CSGO为例 分析不同网络延时下FPS游戏同步的实现
  10. 游戏音乐是游戏内涵的补充