当前位置: 首页 > 知识库问答 >
问题:

如何在画布上突出显示特定矩形

仲孙昊焱
2023-03-14

基于我在画布上使用的代码和截图,我试着填充一个红色的矩形,但是没有效果。如何才能确保只填充最上面一行左起第二个矩形?

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

    public Car(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public Car(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    Paint paint;

    private void init() {
        paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(4);
//        paint.setStyle(Paint.Style.STROKE); // delete line for filled rect
    }

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

        int w = canvas.getWidth();
        int h = canvas.getHeight();

        int rectWidth = w / 5;
        int space = w / 15;
        int topRectHeight = getPaddingTop();
        int bottomRectHeight = getPaddingBottom();

        for (int i = 0; i < 4; i++) {
            int left = i * (rectWidth + space);
            int right = left + rectWidth;

            if (i == 2){
                paint.setStyle(Paint.Style.STROKE); // delete line for filled rect
            }

            Rect rect = new Rect(left, 0, right, topRectHeight);
            canvas.drawRect(rect, paint);

            Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
            canvas.drawRect(rect2, paint);
        }
    }
}

共有1个答案

魏学智
2023-03-14

这样,只有指定的矩形将被填充(只有顶部第二个)。

 paint.setStyle(Paint.Style.STROKE); //add this     
      for (int i = 0; i < 4; i++) {
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;

                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }

                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);
                    paint.setStyle(Paint.Style.STROKE);//add this
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }

如果您只想填充第二个底部:

 paint.setStyle(Paint.Style.STROKE); //you can remove this now    
      for (int i = 0; i < 4; i++) {
                    paint.setStyle(Paint.Style.STROKE);//add this
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;           
                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);

                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }

如果您希望第二个顶部和底部都填充:

paint.setStyle(Paint.Style.STROKE); //you can remove this now    
      for (int i = 0; i < 4; i++) {
                    paint.setStyle(Paint.Style.STROKE);//add this
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;          
                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }

                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }
 类似资料:
  • 问题内容: 每当单元格的内容与用户的输入匹配时,我都希望突出显示JTable中的特定行。以下代码是我到目前为止可以使用的代码: 注意:是在源文件中全局作用域。 现在,此操作在某种程度上可行,但是我将其添加到内的。JTables是在程序运行时动态创建的。但是,该方法会使所有已创建的JTables中的所有特定单元格突出显示。 如何在所有JTable中保留单元格以保留其特定的突出显示单元,而不是让所有J

  • 实际上,我可以使用函数来完成。我从“HTML5画布-如何在图像背景上画一条线?”中得到的东西。但是我需要在不使用from函数的情况下绘制图像,如下所示:

  • 问题内容: 我发现只能填充矩形,而没有圆角,该怎么办? 问题答案: HTML5画布没有提供绘制带有圆角的矩形的方法。 如何使用和方法? 您也可以使用方法代替方法。

  • 我使用gridview在我的gridview中选择多个项目(图像)。 我使用< code > MultiChoiceModeListener 来实现这一点,问题是选中的项目没有突出显示 选择器xml: 当我触摸一个项目时,它被蓝色覆盖(我认为这是因为我使用了< code > GridView . setdrawselectorontop(true);)...我一抬起手指,蓝色就消失了。 我希望选择

  • 我试图在现有画布中的特定框顶部添加一些红色矩形,与预期结果图像完全相同,但它们根本没有出现,因为我的代码显示了部署应用程序时当前不希望出现的结果。我的代码是在顶行和底行分别创建4个矩形,但我只想将其添加到框2-6的顶部,但我知道需要为框1顶部的红色矩形添加额外的代码 activity_main.xml MainActivity.java