在片段中绘制多个对象图

我想要绘制一个图表,就像附加的图像一样,但我在绘制右边的红色垂直矩形以及将其他对象放在顶部时遇到了问题。 最大的问题是与Android设备的众多不同屏幕尺寸有关。 我完全理解我在这个过程中想要实现的目标,其中包括以下目标。 所有帮助将非常感谢。

  • 屏幕两侧各有一个红色矩形(右侧我不知道如何在那里画画)
  • 红色垂直矩形之间的7个灰色框需要在宽度上相等
  • 黑色垂直线需要位于矩形之间,就像上图中一样
  • 显示数字的文本框需要位于每个灰色矩形的中心以及小红色矩形
  • 我也希望将来可以重复使用图表,这样我就可以随时用红色或黑色填充小方块

在此处输入图像描述

布局

    

Java的

 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 ComplexDiagram extends View { private int measuredWidth, measuredHeight; private Paint mGreyRectPaint, mBlackLinePaint, mRedRectPaint; private RectF mGreyRect, mBlackLineF, mRedRectF; public ComplexDiagram(Context context) { super(context); init(context, null, 0); } public ComplexDiagram(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs, 0); } public ComplexDiagram(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs, defStyleAttr); } private void init(Context context, AttributeSet attributeSet, int defStyle) { mGreyRectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mGreyRectPaint.setColor(0xFF3C3C3C); mGreyRectPaint.setStyle(Paint.Style.FILL); mBlackLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBlackLinePaint.setColor(0xFF000000); mBlackLinePaint.setStyle(Paint.Style.FILL); mRedRectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mRedRectPaint.setColor(0xFFCC3333); mRedRectPaint.setStyle(Paint.Style.FILL); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); measuredHeight = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); measuredWidth = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); setMeasuredDimension(measuredWidth, measuredHeight); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (measuredHeight == 0 || measuredWidth == 0) return; canvas.drawRect(mGreyRect, mGreyRectPaint); canvas.drawRect(mBlackLineF, mBlackLinePaint); canvas.drawRect(mRedRectF, mRedRectPaint); } } 

这样做

把它放在你的XML中

                                                                                     

对于red rectangle.xml