Android Paint Style 如何正确画一个空心矩形

Android在用画笔的时候有三种Style,分别是
Paint.Style.STROKE 只绘制图形轮廓(描边)
Paint.Style.FILL 只绘制图形内容
Paint.Style.FILL_AND_STROKE 既绘制轮廓也绘制内容

那么如何正确画一个空心矩形呢?
比如我们现在要画一个200x200像素,轮廓宽度为40像素的空心矩形,显示效果如下,上面的粉色是宽度为200像素的view。
image.png

代码如下:

<ImageView
        android:id="@+id/imageview"
        android:layout_width="200px"
        android:layout_height="40px"
        android:layout_marginTop="40dp"
        android:layout_marginLeft="40px"
        android:layout_below="@id/ll_top"
        android:background="#FF00FF"
        />
    <com.xiaoer.test.TestView
        android:id="@+id/testview"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/imageview"
        android:layout_marginLeft="40px"
        />

自定义TestView代码:

package com.xiaoer.test;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

import androidx.annotation.Nullable;

public class TestView extends View {
    public TestView(Context context) {
        super(context);
    }


    public TestView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        RectF rectF = new RectF();
        Paint shellPaint = new Paint();
        shellPaint.setAntiAlias(true);
        shellPaint.setColor(Color.RED);
        int strokeWidth = 40;
        shellPaint.setStrokeWidth(strokeWidth);
        shellPaint.setStyle(Paint.Style.STROKE);

        rectF.left = strokeWidth/2;
        rectF.right = 200 - strokeWidth/2;
        rectF.top = strokeWidth/2;
        rectF.bottom = 200 - strokeWidth/2;

        canvas.drawRect(rectF, shellPaint);

    }
}


总结:确定坐标时要考虑轮廓的宽度,想象我们自己拿一个画笔,画笔的宽度是40px,那么我们下笔的时候肯定不是从顶端开始,而是从画笔宽度的一半开始画。

如果我们设置如下坐标值:

  rectF.left = 0;
  rectF.right = 200;
  rectF.top = 0;
  rectF.bottom = 200 ;

那么我们画出的将是这个样式:
image.png

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在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()方法在圆形布边缘绘制矩形

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值