【发布时间】:2023-03-25 05:20:01
【问题描述】:
我想像所附图像一样绘制图表,但在绘制右侧的红色垂直矩形以及将其他对象放在顶部时遇到问题。最大的担忧是与众多不同屏幕尺寸的 Android 设备有关。我完全理解我在此过程中想要实现的目标,其中包括以下目标。我们将不胜感激所有帮助。
- 屏幕两边各有1个红色矩形(右手边我不知道怎么画)
- 红色垂直矩形之间的7个灰色框需要宽度相等
- 黑色垂直线需要在矩形之间,就像上图一样
- 显示数字的文本框需要位于每个灰色矩形和红色小矩形的中心
- 我还希望将来能够重复使用该图表,以便我可以随时用红色或黑色填充小方框
布局
<?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">
<my.package.name.ComplexDiagram
android:layout_width="match_parent"
android:layout_height="65dp"
android:layout_centerVertical="true"
/>
</RelativeLayout>
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);
}
}
【问题讨论】:
-
框 1 和 7 是否需要有 6 个矩形,或者他们可以像其余的一样使用 8 个?
-
他们需要有 6 个与图片中看到的完全相同。我还想完成其他图纸,所以我认为我们应该在聊天中讨论这个问题,以便我可以将它们展示给您。 :-)
-
@BojanKseneman 之前有人告诉我不要让视图超载活动,最好在一节课中完成。我更多地考虑“1 类”方法,但是我会看到两种方法都被绘制并从 2 个选项中进行选择。
-
每个项目都应该有一个 BaseActivity 类,这是所有其他项目的扩展类。片段也是如此。不知道他们告诉你什么。反正我现在正忙于攻读硕士学位,所以我现在无法做到这一点。等我有时间再试试。
-
您对 SAR 图像做过什么吗? ://
标签: java android android-shape