android 扇形切换,Android 一个炫酷的扇形菜单

效果演示

4af64f918606

效果展示

如何使用

1、布局

android:id="@+id/sector_menu"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

app:aebAnimDurationMillis="175"

app:aebBlurBackground="true"

app:aebBlurRadius="10"

app:aebButtonElevation="0dp"

app:aebButtonGapDp="60dp"

app:aebEndAngleDegree="359"

app:aebIsSelectionMode="false"

app:aebMainButtonRotateAnimDurationMillis="300"

app:aebMainButtonRotateDegree="0"

app:aebMainButtonSizeDp="50dp"

app:aebRippleEffect="true"

app:aebStartAngleDegree="270"

app:aebSubButtonSizeDp="50dp" />

2、初始化菜单

private void initSectorMenuButton() {

SectorMenuButton sectorMenuButton = (SectorMenuButton) findViewById(R.id.sector_menu);

final List buttonDatas = new ArrayList<>();

int[] drawable = {R.mipmap.like, R.mipmap.mark, R.mipmap.search, R.mipmap.copy};

for (int i = 0; i < 4; i++) {

//最后一个参数表示padding

ButtonData buttonData = ButtonData.buildIconButton(this, drawable[i], 0);

buttonData.setBackgroundColorId(this, R.color.colorAccent);

buttonDatas.add(buttonData);

}

sectorMenuButton.setButtonDatas(buttonDatas);

setListener(sectorMenuButton);

}

3、设置监听

private void setListener(final SectorMenuButton button) {

button.setButtonEventListener(new ButtonEventListener() {

@Override

public void onButtonClicked(int index) {

showToast("button" + index);

}

@Override

public void onExpand() {

showToast("onExpand");

}

@Override

public void onCollapse() {

showToast("onCollapse");

}

});

}

自定义属性说明

attribute

value type

说明

aebStartAngleDegree

integer

展开按钮的开始角度

aebEndAngleDegree

integer

展开按钮的结束角度

aebMaskBackgroundColor

color

当菜单为开启状态时全屏的背景颜色

aebIsSelectionMode

boolean

当子按钮被选中,主按钮设置为选定状态

aebAnimDurationMillis

integer

开启关闭菜单时播放动画的时间

aebMainButtonRotateAnimDurationMillis

integer

主按钮旋转动画的时间

aebMainButtonRotateDegree

integer

主按钮旋转动画的角度

aebButtonElevation

dimen

按钮阴影效果的范围

aebRippleEffect

boolean

当按钮单点击时是否设置水波纹效果

aebRippleColor

color

主按钮点击时水波纹效果的颜色,默认为按钮颜色

aebMainButtonSizeDp

dimen

主按钮的大小

aebMainButtonTextSizeSp

dimen

主按钮的文字大小

aebMainButtonTextColor

color

主按钮的文字颜色

aebSubButtonSizeDp

dimen

子按钮的大小

aebSubButtonTextSizeSp

dimen

子按钮的文字大小

aebSubButtonTextColor

color

子按钮文字颜色

aebButtonGapDp

dimen

主按钮与子按钮之间的距离

其它说明

因为当中用到了高斯模糊效果,代码如下

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)

@WorkerThread

private Bitmap getBlurBitmap(Context context, Bitmap inBitmap, float radius) {

if (context == null || inBitmap == null) {

throw new IllegalArgumentException("have not called setParams() before call execute()");

}

int width = Math.round(inBitmap.getWidth() * SCALE);

int height = Math.round(inBitmap.getHeight() * SCALE);

Bitmap in = Bitmap.createScaledBitmap(inBitmap, width, height, false);

Bitmap out = Bitmap.createBitmap(in);

RenderScript rs = RenderScript.create(context);

ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs,Element.U8_4(rs));

Allocation allocationIn = Allocation.createFromBitmap(rs, in);

Allocation allocationOut = Allocation.createFromBitmap(rs, out);

blurScript.setRadius(radius);

blurScript.setInput(allocationIn);

blurScript.forEach(allocationOut);

allocationOut.copyTo(out);

allocationIn.destroy();

allocationOut.destroy();

blurScript.destroy();

rs.destroy();

return out;

}

Android Studio中,support v8包不能通过添加dependencies的方式加入。从sdk的目录下手动拷贝到工程的libs下面。这个包的参考路径如下:sdk/build-tools/21.1.1/renderscript/lib/renderscript-v8.jar。

但是有个更简单的方法,只要在build.gradle中加入下面两句话即可直接使用RenderScript相关API:

defaultConfig {

...

//start

renderscriptTargetApi 18

renderscriptSupportModeEnabled true

//end

}

最后

本文作者:Rance935本文出处:Android 一个炫酷的扇形菜单转载请在开头注明作者详细信息和本文出处

欢迎关注我的微信公众号和QQ群,分享Android 开发和互联网内容

Android技术分享:群号534813930

微信号:androidparks

公众号:AndroidParks

4af64f918606

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值