android 自己动手画一个圆形菜单

本文使用画笔Paint来自定义一个半圆形的菜单 如下图:


demo下载地址:http://download.csdn.net/detail/suyiyang888/8528707

一、定义类CircleMenu继承View,重写三个构造函数

二、在onLayout(boolean changed, int left, int top, int right,int bottom)方法中可以获取到此view在屏幕上的上下左右坐标。通过x = right - left,y = bottom - top可计算出当前view的尺寸,为接下来画圆做准备。

三、初始化

1、由于屏幕尺寸的不同,所以导致当前view的尺寸是不定的,只能通过计算来获取当前圆形菜单的半径(此计算方法是我经过多尺寸手机的实际测试计算出来的),这里得到的不是整个圆,而是大半圆,所以圆点坐标往X轴正方向移动了大概1/3

mPaint.setColor(666885);
mPaint.setStrokeWidth(6);
setBackgroundResource(R.drawable.bg);
dvlue = 0;// 做适配屏幕处理
if (x >= y) {
minSize = y;
dvlue = x - y;
} else {
minSize = x;
dvlue = y - x;
}
if (dvlue > 180) {
mPointX = x / 3 * 2 + minSize / 10;
mPointY = y / 2 + minSize / 20;
mRadius = minSize / 2 &#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android上实现一个圆形布并在圆形出矩形,可以使用BitmapShader和Canvas对象的drawRoundRect()方法。 具体实现步骤如下: 1. 创建一个Bitmap对象,并将其设置为你想要作为布的图像。 2. 创建一个BitmapShader对象,并将其设置为圆形模式。 3. 创建一个Paint对象,并将其设置为使用BitmapShader绘制图像。 4. 创建一个Canvas对象,并使用drawCircle()方法将布绘制成圆形。 5. 使用drawRoundRect()方法在圆形布边缘绘制矩形。 以下是示例代码: ``` // 创建一个Bitmap对象 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image); // 创建一个BitmapShader对象 BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); // 创建一个Paint对象 Paint paint = new Paint(); paint.setShader(shader); // 创建一个Canvas对象 Canvas canvas = new Canvas(); // 计算圆形布的半径 int radius = Math.min(bitmap.getWidth(), bitmap.getHeight()) / 2; // 在Canvas对象上绘制圆形布 canvas.drawCircle(radius, radius, radius, paint); // 在圆形布边缘绘制矩形 RectF rect = new RectF(radius - 50, radius - 50, radius + 50, radius + 50); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED); canvas.drawRoundRect(rect, 10, 10, paint); ``` 在上面的代码中,我们首先通过BitmapFactory.decodeResource()方法创建了一个Bitmap对象,并将其设置为我们想要作为布的图像。然后,我们创建了一个BitmapShader对象,并使用Shader.TileMode.CLAMP模式设置其为圆形模式。接着,我们创建了一个Paint对象,并将其设置为使用BitmapShader绘制图像。然后,我们创建了一个Canvas对象,并使用drawCircle()方法在Canvas对象上绘制圆形布。最后,我们使用drawRoundRect()方法在圆形布边缘绘制矩形。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值