圆形导航菜单radial-menu-widget详解

1.   综述

  radial-menu-widget是应用于Android一个开源的圆形导航按钮,最后一次更新是2013年4月的版本,相关介绍和下载地址为:https://code.google.com/p/radial-menu-widget/,jar包和demo也可以从本人的CSDN上传的资源处下载(http://download.csdn.net/detail/brillianteagle/9379066)。下载其Demo,有4种类型。下面是效果图。

1)  标准圆形按钮

点击Open Menu按钮,可以打开标准圆形按钮。一级菜单平分外围的圆环。点击Exandable可以打开其对应的二级菜单。



图1,标准圆形菜单(1级目录)


2)  隐藏式圆形菜单

同标准圆形菜单不同,这里需要长按屏幕,长按点出现圆形菜单,继续长按并滑动到对应一级菜单即可。


3)   圆形进度条


4)  半圆形菜单

点击半圆形菜单“open”,一级菜单会显示出来,犹如“孔雀开屏”。这种菜单适合“贴边”使用,例如放到左侧贴边显示,其朝向可以进行设置。


2.   实现方式

  以标准圆形菜单为例,查看源码,发现是通过PopupWindow来实现的。

/**
 * This is the core class that handles the widget display and user interaction.
 * 
 * @author Jason Valestin (valestin@gmail.com )
 * @author Arindam Nath (strider2023@gmail.com)
 */
public class RadialMenuWidget extends View {

	private RadialMenuHelper helper;

	private List<RadialMenuItem> menuEntries = new ArrayList<RadialMenuItem>();//一级菜单
	private RadialMenuItem centerCircle = null;//中心菜单
	
	private PopupWindow mWindow;//用于显示view的容器
        //……省略无关内容

	/**
	 * Radial menu widget constructor.
	 * @param context - Application Context.
	 * <strong> Usage </strong>
	 * 
	 * RadialMenuWidget pieMenu = new RadialMenuWidget(this);
	 * pieMenu.addMenuEntry(menuItem);
	 * pieMenu.show(view);
	 */
	public RadialMenuWidget(Context context) {
		super(context);
		helper = new RadialMenuHelper();
		mWindow = helper.initPopup(context);
		// Gets screen specs and defaults to center of screen
		this.xPosition = (getResources().getDisplayMetrics().widthPixels) / 2;
		this.yPosition = (getResources().getDisplayMetrics().heightPixels) / 2;
		
		determineWedges();
		helper.onOpenAnimation(this, xPosition, yPosition, xSource, ySource);
	}

	/**
	 * Shows the radial menu widget.
	 * @param anchor - View to be anchored to.
	 */
	public void show(View anchor) {
		mWindow.setContentView(this);//把this添加到PopupWindow
		mWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, this.xSource, this.ySource);//显示PopupWindow
	}
	
	/**
	 * Dismisses the radial menu widget.
	 */
	public void dismiss() {
		if(mWindow != null)
			mWindow.dismiss();
	}
        //……省略无关内容

}

3.   使用

   使用起来相对简单,demo中有详细用例,这里不再赘述。最后说一点,对于半圆形菜单,默认的展开的朝向是向上(HORIZONTAL_BOTTOM),查看源码,可以发现,控制它朝向的是:

/**
	 * Set the orientation the semi-circular radial menu.
	 * There are four possible orientations only
	 * VERTICAL_RIGHT , VERTICAL_LEFT , HORIZONTAL_TOP, 
	 * HORIZONTAL_BOTTOM
	 * @param orientation
	 */
	public void setOrientation(int orientation) {
		mOrientation = orientation;
		mMenuRect = getRadialMenuRect(false);
		mMenuCenterButtonRect = getRadialMenuRect(true);
		invalidate();
	}

其中:

public staticfinal int VERTICAL_RIGHT = 0;

public staticfinal int VERTICAL_LEFT = 1;

public staticfinal int HORIZONTAL_TOP = 2;

public staticfinal int HORIZONTAL_BOTTOM = 3;

更改朝向即调用:

SemiCircularRadialMenu menu = (SemiCircularRadialMenu) findViewById(R.id.radial_menu); 
Menu. setOrientation(SemiCircularRadialMenu. VERTICAL_RIGHT);



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
radial-gradient函数是CSS中用于创建径向渐变背景的函数。它可以创建从一个中心点向周围辐射的渐变效果。在radial-gradient函数中,我们可以使用repeating-radial-gradient函数来创建重复的径向渐变。 在radial-gradient函数中,我们可以通过指定颜色停止点和可选的大小参数来定义径向渐变的样式。使用颜色参数,我们可以指定渐变的起始颜色,以及在指定的颜色停止点处的颜色。使用大小参数,我们可以手动指定渐变的大小,可以将大小设置为圆形(circle)或椭圆(ellipse)。 例如,我们可以使用radial-gradient函数得到以下效果: ```css div { background: radial-gradient(red, yellow); } ``` 这个例子将创建一个从红色渐变到黄色的径向渐变背景。 另外,我们还可以使用size参数来指定渐变的大小。size参数有四个值可选,分别是closest-side、farthest-side、closest-corner和farthest-corner。它们决定了渐变到哪里停止。closest-side表示渐变到最近的边界停止,farthest-side表示渐变到最远的边界停止,closest-corner表示渐变到最近的角停止,farthest-corner表示渐变到最远的角停止。 举个例子,我们可以使用radial-gradient函数来创建以下径向渐变背景: ```css div { background: radial-gradient(60% 40%, closest-side, blue, green, yellow, black); } ``` 这个例子将创建一个以最近边界为停止点的径向渐变,从蓝色渐变到绿色、黄色、黑色。 总结起来,radial-gradient函数是用于创建径向渐变背景的CSS函数,它可以通过指定颜色和大小参数来定义渐变的样式,同时还可以使用repeating-radial-gradient函数来创建重复的径向渐变。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值