Android CircularFloatingActionMenu (1)

Android CircularFloatingActionMenu在github上项目主页地址:https://github.com/oguzbilgener/CircularFloatingActionMenu
Android CircularFloatingActionMenu要实现的效果如动态图所示:


Java代码:

import android.animation.ObjectAnimator;import android.animation.PropertyValuesHolder;import android.app.Activity;import android.os.Bundle;//import android.view.Menu;//import android.view.MenuItem;import android.view.View;import android.widget.FrameLayout;import android.widget.ImageView;import com.oguzdev.circularfloatingactionmenu.library.FloatingActionButton;import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu;import com.oguzdev.circularfloatingactionmenu.library.SubActionButton;/** * 一个FloatingActionButton有一个FloatingActionMenu,FloatingActionMenu添加动画弹出的子菜单。 * FloatingActionButton的按钮点击事件将触发、弹出FloatingActionMenu中包含的子菜单。 * FloatingActionMenu使用attachTo方法附着在一个FloatingActionButton上。 * FloatingActionMenu在attachTo到一个FloatingActionButton后,两者之间发生关联。 * FloatingActionMenu在添加子菜单时候,首先需要一个SubActionButton.Builder,该SubActionButton. * Builder通过setContentView(ImageView * image).build()把一个ImageView创建生产一个SubActionButton , * 然后通过FloatingActionMenu.Builder的add方法把前面生成的SubActionButton添加进去。 *  *  * 按钮的旋转动画在onMenuOpened和onMenuClosed中做。 *  */public class MenuWithFABActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 添加 右下角的白色+号按钮final ImageView fabIconNew = new ImageView(this);fabIconNew.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_new_light));final FloatingActionButton rightLowerButton = new FloatingActionButton.Builder(this).setContentView(fabIconNew).build();SubActionButton.Builder rLSubBuilder = new SubActionButton.Builder(this);ImageView rlIcon1 = new ImageView(this);ImageView rlIcon2 = new ImageView(this);ImageView rlIcon3 = new ImageView(this);ImageView rlIcon4 = new ImageView(this);rlIcon1.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_chat_light));rlIcon2.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_camera_light));rlIcon3.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_video_light));rlIcon4.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_place_light));// Build the menu with default options: light theme, 90 degrees, 72dp// radius.// Set 4 default SubActionButtons// FloatingActionMenu通过attachTo(rightLowerButton)附着到FloatingActionButtonfinal FloatingActionMenu rightLowerMenu = new FloatingActionMenu.Builder(this).addSubActionView(rLSubBuilder.setContentView(rlIcon1).build()).addSubActionView(rLSubBuilder.setContentView(rlIcon2).build()).addSubActionView(rLSubBuilder.setContentView(rlIcon3).build()).addSubActionView(rLSubBuilder.setContentView(rlIcon4).build()).attachTo(rightLowerButton).build();// Listen menu open and close events to animate the button content viewrightLowerMenu.setStateChangeListener(new FloatingActionMenu.MenuStateChangeListener() {@Overridepublic void onMenuOpened(FloatingActionMenu menu) {// 增加按钮中的+号图标顺时针旋转45度// Rotate the icon of rightLowerButton 45 degrees clockwisefabIconNew.setRotation(0);PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat(View.ROTATION, 45);ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(fabIconNew, pvhR);animation.start();}@Overridepublic void onMenuClosed(FloatingActionMenu menu) {// 增加按钮中的+号图标逆时针旋转45度// Rotate the icon of rightLowerButton 45 degrees// counter-clockwisefabIconNew.setRotation(45);PropertyValuesHolder pvhR = PropertyValuesHolder.ofFloat(View.ROTATION, 0);ObjectAnimator animation = ObjectAnimator.ofPropertyValuesHolder(fabIconNew, pvhR);animation.start();}});// 左边中间的红底白色星型按钮// Set up the large red button on the center right side// With custom button and content sizes and marginsint redActionButtonSize = getResources().getDimensionPixelSize(R.dimen.red_action_button_size);int redActionButtonMargin = getResources().getDimensionPixelOffset(R.dimen.action_button_margin);int redActionButtonContentSize = getResources().getDimensionPixelSize(R.dimen.red_action_button_content_size);int redActionButtonContentMargin = getResources().getDimensionPixelSize(R.dimen.red_action_button_content_margin);int redActionMenuRadius = getResources().getDimensionPixelSize(R.dimen.red_action_menu_radius);int blueSubActionButtonSize = getResources().getDimensionPixelSize(R.dimen.blue_sub_action_button_size);int blueSubActionButtonContentMargin = getResources().getDimensionPixelSize(R.dimen.blue_sub_action_button_content_margin);ImageView fabIconStar = new ImageView(this);fabIconStar.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_important));FloatingActionButton.LayoutParams starParams = new FloatingActionButton.LayoutParams(redActionButtonSize,redActionButtonSize);starParams.setMargins(redActionButtonMargin, redActionButtonMargin, redActionButtonMargin,redActionButtonMargin);fabIconStar.setLayoutParams(starParams);FloatingActionButton.LayoutParams fabIconStarParams = new FloatingActionButton.LayoutParams(redActionButtonContentSize, redActionButtonContentSize);fabIconStarParams.setMargins(redActionButtonContentMargin, redActionButtonContentMargin,redActionButtonContentMargin, redActionButtonContentMargin);final FloatingActionButton leftCenterButton = new FloatingActionButton.Builder(this).setContentView(fabIconStar, fabIconStarParams).setBackgroundDrawable(R.drawable.button_action_red_selector)// 红底白星按钮选中时候状态变化和背景颜色.setPosition(FloatingActionButton.POSITION_LEFT_CENTER)// 左边居中.setLayoutParams(starParams).build();// Set up customized SubActionButtons for the right center menuSubActionButton.Builder lCSubBuilder = new SubActionButton.Builder(this);lCSubBuilder.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_action_blue_selector));FrameLayout.LayoutParams blueContentParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,FrameLayout.LayoutParams.MATCH_PARENT);blueContentParams.setMargins(blueSubActionButtonContentMargin, blueSubActionButtonContentMargin,blueSubActionButtonContentMargin, blueSubActionButtonContentMargin);lCSubBuilder.setLayoutParams(blueContentParams);// Set custom layout paramsFrameLayout.LayoutParams blueParams = new FrameLayout.LayoutParams(blueSubActionButtonSize,blueSubActionButtonSize);lCSubBuilder.setLayoutParams(blueParams);ImageView lcIcon1 = new ImageView(this);ImageView lcIcon2 = new ImageView(this);ImageView lcIcon3 = new ImageView(this);ImageView lcIcon4 = new ImageView(this);ImageView lcIcon5 = new ImageView(this);lcIcon1.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_camera));lcIcon2.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_picture));lcIcon3.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_video));lcIcon4.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_location_found));lcIcon5.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_headphones));// Build another menu with custom optionsfinal FloatingActionMenu leftCenterMenu = new FloatingActionMenu.Builder(this).addSubActionView(lCSubBuilder.setContentView(lcIcon1, blueContentParams).build()).addSubActionView(lCSubBuilder.setContentView(lcIcon2, blueContentParams).build()).addSubActionView(lCSubBuilder.setContentView(lcIcon3, blueContentParams).build()).addSubActionView(lCSubBuilder.setContentView(lcIcon4, blueContentParams).build()).addSubActionView(lCSubBuilder.setContentView(lcIcon5, blueContentParams).build()).setRadius(redActionMenuRadius).setStartAngle(70).setEndAngle(-70).attachTo(leftCenterButton).build();}// @Override// public boolean onCreateOptionsMenu(Menu menu) {// // Inflate the menu; this adds items to the action bar if it is present.// getMenuInflater().inflate(R.menu.menu_with_fab, menu);// return true;// }//// @Override// public boolean onOptionsItemSelected(MenuItem item) {// // Handle action bar item clicks here. The action bar will// // automatically handle clicks on the Home/Up button, so long// // as you specify a parent activity in AndroidManifest.xml.// int id = item.getItemId();// if (id == R.id.action_settings) {// return true;// }// return super.onOptionsItemSelected(item);// }}

其中用到的定义的尺寸在该项目的库文件及demo中代码文件中已经定义。


附录相关文章:
【1】《Android第三方开源FloatingActionButton(com.getbase.floatingactionbutton)【1】》链接地址:http://blog.csdn.net/zhangphil/article/details/50166715
【2】《Android第三方开源FloatingActionButton(com.getbase.floatingactionbutton)【2】》链接地址:http://blog.csdn.net/zhangphil/article/details/50166929
【3】《Android第三方开源FloatingActionButton(com.getbase.floatingactionbutton): FloatingActionsMenu【3】》链接地址:http://blog.csdn.net/zhangphil/article/details/50167609
【4】《Android FloatingActionButton: FloatingActionsMenu向下伸展弹出及删除包含的FloatingActionButton【4】》链接地址:http://blog.csdn.net/zhangphil/article/details/50182019
【5】《Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout》链接地址:http://blog.csdn.net/zhangphil/article/details/48861371
【6】《Android第三方FloatingActionButton:伴随ListView、RecyclerView、ScrollView滚动滑入滑出》链接地址:http://blog.csdn.net/zhangphil/article/details/50135707

更多相关文章

  1. Android(安卓)8.0 Tv 修改以太网ip地址 掩码 网关 DNS及DHCP和静
  2. [转]Android(安卓)开源项目分类汇总
  3. 自定义按钮实现android 返回按钮 事件
  4. Android(安卓)文件下载工具类
  5. goolge 地图地址位置解析
  6. Android获取Mac地址
  7. Android(安卓)点击back键两次退出程序
  8. android延迟进入主界面和点击按钮进入主界面代码
  9. Android淘宝客链接自动跳转淘宝APP问题

随机推荐

  1. SQLServer 2000 升级到 SQLServer 2008
  2. 只有mdf文件的数据库附加失败的修复方法
  3. sqlserver 锁表语句分享
  4. 某年第一周开始日期实现方法
  5. 在sql Server自定义一个用户定义星期函数
  6. sqlserver 不重复的随机数
  7. SQLServer Execpt和not in 性能区别
  8. SQL优化基础 使用索引(一个小例子)
  9. 一次性压缩Sqlserver2005中所有库日志的
  10. EXEC(EXECUTE)函数访问INSERTED或DELETED