Android Canvas 画一个宽 90 高20的 圆角椭圆形
时间: 2024-02-08 08:05:55 浏览: 36
好的,以下是画一个宽为90,高为20的圆角椭圆形的代码:
```java
// 创建一个Bitmap对象
Bitmap bitmap = Bitmap.createBitmap(90, 20, Bitmap.Config.ARGB_8888);
// 创建一个Canvas对象
Canvas canvas = new Canvas(bitmap);
// 创建一个Paint对象
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
// 创建一个RectF对象
RectF rectF = new RectF(0, 0, 90, 20);
// 画圆角矩形
canvas.drawRoundRect(rectF, 10, 10, paint);
```
解释一下代码:
首先,我们创建一个Bitmap对象,并指定宽为90,高为20。然后,我们创建一个Canvas对象,将Bitmap对象传入,这样我们就可以在这个Bitmap上进行绘制了。
接着,我们创建一个Paint对象,并设置抗锯齿和颜色。抗锯齿可以让图形边缘更加平滑,颜色可以根据自己的需求设置。
然后,我们创建一个RectF对象,指定圆角矩形的位置和大小。最后,我们调用Canvas的drawRoundRect方法,传入RectF对象和圆角的大小,即可画出一个圆角矩形。
注意,以上代码只是画出了一个圆角矩形,如果需要把它变成圆角椭圆形,只需要将RectF的高度设置得比宽度小即可。
相关问题
Android Canvas 画一个钟表
以下是一个简单的Android Canvas绘制钟表的示例代码:
```java
public class MyClockView extends View {
private Paint mCirclePaint;
private Paint mLinePaint;
private Paint mTextPaint;
private Paint mHourHandPaint;
private Paint mMinuteHandPaint;
private Paint mSecondHandPaint;
private float mHour;
private float mMinute;
private float mSecond;
public MyClockView(Context context) {
super(context);
init();
}
public MyClockView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyClockView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mCirclePaint = new Paint();
mCirclePaint.setAntiAlias(true);
mCirclePaint.setStyle(Paint.Style.STROKE);
mCirclePaint.setStrokeWidth(5);
mCirclePaint.setColor(Color.BLACK);
mLinePaint = new Paint();
mLinePaint.setAntiAlias(true);
mLinePaint.setStyle(Paint.Style.STROKE);
mLinePaint.setStrokeWidth(3);
mLinePaint.setColor(Color.BLACK);
mTextPaint = new Paint();
mTextPaint.setAntiAlias(true);
mTextPaint.setStyle(Paint.Style.FILL);
mTextPaint.setTextSize(30);
mTextPaint.setColor(Color.BLACK);
mHourHandPaint = new Paint();
mHourHandPaint.setAntiAlias(true);
mHourHandPaint.setStyle(Paint.Style.STROKE);
mHourHandPaint.setStrokeWidth(8);
mHourHandPaint.setColor(Color.BLACK);
mMinuteHandPaint = new Paint();
mMinuteHandPaint.setAntiAlias(true);
mMinuteHandPaint.setStyle(Paint.Style.STROKE);
mMinuteHandPaint.setStrokeWidth(5);
mMinuteHandPaint.setColor(Color.BLACK);
mSecondHandPaint = new Paint();
mSecondHandPaint.setAntiAlias(true);
mSecondHandPaint.setStyle(Paint.Style.STROKE);
mSecondHandPaint.setStrokeWidth(3);
mSecondHandPaint.setColor(Color.RED);
// 获取当前时间
Calendar calendar = Calendar.getInstance();
mHour = calendar.get(Calendar.HOUR_OF_DAY);
mMinute = calendar.get(Calendar.MINUTE);
mSecond = calendar.get(Calendar.SECOND);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 获取控件宽高
int width = getWidth();
int height = getHeight();
// 计算圆的半径
int radius = Math.min(width, height) / 2 - 10;
// 画圆
canvas.drawCircle(width / 2, height / 2, radius, mCirclePaint);
// 画刻度线和数字
for (int i = 0; i < 12; i++) {
canvas.save();
canvas.translate(width / 2, height / 2);
canvas.rotate(i * 30);
canvas.drawLine(0, -radius, 0, -radius + 30, mLinePaint);
canvas.drawText(String.valueOf(i + 1), -10, -radius + 60, mTextPaint);
canvas.restore();
}
// 画时针
canvas.save();
canvas.translate(width / 2, height / 2);
canvas.rotate(mHour * 30 + mMinute / 2);
canvas.drawLine(0, 0, 0, -radius / 2, mHourHandPaint);
canvas.restore();
// 画分针
canvas.save();
canvas.translate(width / 2, height / 2);
canvas.rotate(mMinute * 6);
canvas.drawLine(0, 0, 0, -radius * 3 / 4, mMinuteHandPaint);
canvas.restore();
// 画秒针
canvas.save();
canvas.translate(width / 2, height / 2);
canvas.rotate(mSecond * 6);
canvas.drawLine(0, 0, 0, -radius + 20, mSecondHandPaint);
canvas.restore();
// 刷新时间
postInvalidateDelayed(1000);
}
}
```
在xml布局文件中添加MyClockView:
```xml
<com.example.myapp.MyClockView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
```
运行效果如下图所示:
![image](https://user-images.githubusercontent.com/543384/136059427-20c4b3c3-e3c8-4e2d-b0d1-7e5bfc8b9d11.png)
使用canvas绘制一个10弧度的圆角三角形
可以通过绘制一个带有圆角的矩形和三角形来实现圆角三角形。具体步骤如下:
1. 绘制带有圆角的矩形
2. 绘制三角形
3. 在圆角矩形和三角形的交界处裁剪出圆角三角形
代码如下:
```html
<canvas id="canvas" width="200" height="200"></canvas>
```
```javascript
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
// 绘制圆角矩形
function roundedRect(x, y, w, h, r) {
ctx.beginPath();
ctx.moveTo(x + r, y);
ctx.lineTo(x + w - r, y);
ctx.arcTo(x + w, y, x + w, y + r, r);
ctx.lineTo(x + w, y + h);
ctx.lineTo(x, y + h);
ctx.lineTo(x, y + r);
ctx.arcTo(x, y, x + r, y, r);
ctx.closePath();
}
// 绘制三角形
function triangle(x, y, size) {
const halfSize = size / 2;
ctx.beginPath();
ctx.moveTo(x, y - halfSize);
ctx.lineTo(x + halfSize, y + halfSize);
ctx.lineTo(x - halfSize, y + halfSize);
ctx.closePath();
}
const x = 100;
const y = 100;
const size = 100;
const radius = 10;
// 绘制圆角矩形
roundedRect(x - size / 2, y, size, size, radius);
ctx.fillStyle = '#f00';
ctx.fill();
// 绘制三角形
triangle(x, y, size);
ctx.fillStyle = '#f00';
ctx.fill();
// 裁剪出圆角三角形
ctx.globalCompositeOperation = 'destination-in';
roundedRect(x - size / 2, y, size, size, radius);
triangle(x, y, size);
ctx.fill();
```
运行代码后,会在 canvas 中绘制一个红色的圆角三角形。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)