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

在片段中绘制多层矩形

拓拔霄
2023-03-14

在片段中绘制该图像的最佳方式是什么(所有矩形都应该使用屏幕的整个宽度,高度应该以特定的dp度量)?显然需要画矩形,但我不知道如何在下面的灰色大矩形上画白色和黄色的矩形。同样,使用相同的片段java类,而不是创建一个新的,可以实现这一点吗?

@Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Paint paint = new Paint();
    paint.setColor(Color.parseColor("#868F98"));
    Bitmap bg = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bg); 
    canvas.drawRect(0, 0, 200, 200, paint); 
    LinearLayout ll = (LinearLayout) findViewById(R.id.rect);
    ll.setBackgroundDrawable(new BitmapDrawable(bg));   
 }

共有1个答案

杭曦
2023-03-14

你可以用这样的东西。您可以使用attrs中的自定义属性调整is。xml和公共方法来设置颜色和内容,使其更具可定制性,但基本思想就在这里。

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


public class LayerRectangle extends View {


    private int measuredWidth, measuredHeight;
    private Paint mBackgroundPaint, mYellowLinePaint, mWhiteLinePaint;
    private RectF mBackgroundRect, mYellowLineRectF, mWhiteLineRectF;


    public LayerRectangle(Context context) {
        super(context);
        init(context, null, 0);
    }

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

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

    private void init(Context context, AttributeSet attributeSet, int defStyle) {

        mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mBackgroundPaint.setColor(0xFF3C3C3C);
        mBackgroundPaint.setStyle(Paint.Style.FILL);

        mYellowLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mYellowLinePaint.setColor(0xFFFFFF00);
        mYellowLinePaint.setStyle(Paint.Style.FILL);

        mWhiteLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mWhiteLinePaint.setColor(0xFFFFFFFF);
        mWhiteLinePaint.setStyle(Paint.Style.FILL);
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        measuredHeight = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
        measuredWidth = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);

        mBackgroundRect = new RectF(0, 0, measuredWidth, measuredHeight);
        mYellowLineRectF = new RectF(0, 0.7f * measuredHeight, measuredWidth, 0.8f * measuredHeight);
        mWhiteLineRectF = new RectF(0, 0.9f * measuredHeight, measuredWidth, measuredHeight);

        setMeasuredDimension(measuredWidth, measuredHeight);
    }

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

        if (measuredHeight == 0 || measuredWidth == 0)
            return;

        canvas.drawRect(mBackgroundRect, mBackgroundPaint);
        canvas.drawRect(mYellowLineRectF, mYellowLinePaint);
        canvas.drawRect(mWhiteLineRectF, mWhiteLinePaint);
    }
}

布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <replace.me.with.your.package.name.LayerRectangle
        android:layout_width="match_parent"
        android:layout_height="65dp"
        android:layout_centerVertical="true"
        />

</RelativeLayout>

这就是它看起来的样子

 类似资料:
  • 我想像所附的图像一样绘制图表,但我在绘制右侧的红色垂直矩形以及将其他对象放在顶部时遇到了困难。最大的问题是与许多不同屏幕尺寸的Android设备有关。我完全理解我在这个过程中试图实现的目标,包括以下目标。非常感谢所有帮助。 屏幕两侧各有1个红色矩形(右手边我不知道如何画在那里) 红色垂直矩形之间的7个灰色框的宽度需要相等 黑色垂直线需要在矩形之间,就像上图所示 显示数字的文本框需要与红色小矩形一起

  • 使用closePath()闭合图形 首先我们用上节课的方法绘制一个矩形。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UT

  • 绘制矩形        点击菜单栏中的“绘制矩形”按钮可以绘制矩形,绘制矩形在数据下载的时候经常要用到,绘制矩形操作及信息与绘制面相同。 修改矩形        添加后可以使用“选中对象”后双击更改面的样式,也可右键“属性”修改线的属性信息。点击属性信息框下方的整体移动(单点修改)键对面进行位置的更改。在“空间信息”栏修改矩形的节点坐标后,需要注意的是修改完可能就不是标准矩形了,要调整。 删除矩形

  • 绘制矩形        点击菜单栏中的“绘制矩形”按钮可以绘制矩形,绘制矩形在数据下载的时候经常要用到,绘制矩形操作及信息与绘制面相同。 修改矩形        添加后可以使用“选中对象”后双击更改面的样式,也可右键“属性”修改线的属性信息。点击属性信息框下方的整体移动(单点修改)键对面进行位置的更改。在“空间信息”栏修改矩形的节点坐标后,需要注意的是修改完可能就不是标准矩形了,要调整。 删除矩形

  • 上一节,我们使用lineTo()方法绘制一个封闭的矩形。其实,canvas的API提供了rect()方法可以绘制矩形。rect()方法是路径方法,它会把指定的矩形添加到当前路径的子路径中。它只添加路径,绘制图形还是由stroke()或fill()方法完成。 除了rect()方法之外,Canvas 的API还提供了三个直接处理矩形的方法: fillRect(x, y, width, height)

  • 本节,我们将学习如何绘制矩形,它也是HTML5的画布API唯一所提供的内置图形。矩形看上去可能不会让你感到兴奋,但是许多应用程序还是以某种方式在使用它,所以你也应该了解它。 图2-1 绘制矩形 绘制步骤 按照以下步骤,在画布的中央绘制一个简单的矩形: 1. 定义2D画布上下文: window.onload  = function(){ var canvas  = document.getEl