Mi piacerebbe ottenere il disegno di un diagramma proprio come l'immagine allegata, ma ho difficoltà a disegnare il rettangolo verticale rosso sulla destra insieme a mettere altri oggetti in cima. La più grande preoccupazione è il fare con numerose dimensioni dello schermo differenti dei dispositivi Android. Comprendo appieno ciò che sto cercando di ottenere durante il processo, che include gli obiettivi di seguito. Tutto l'aiuto sarebbe molto apprezzato.Disegna diagramma a oggetti multipli in frammento
- 1 rettangolo rosso su entrambi i lati dello schermo (a destra non so come disegnare lì)
- 7 caselle grigie tra i rettangoli verticali rosse devono essere uguali in larghezza
- una linea verticale nera deve essere tra i rettangoli proprio come nell'immagine sopra
- una casella di testo che mostra un numero deve essere al centro di ciascun rettangolo grigio insieme a quelli rossi
- Voglio anche essere in grado per riutilizzare lo schema in futuro in modo da poter riempire le piccole scatole con rosso o nero ogni volta che vogliono
layout
<?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);
}
}
Do scatola 1 e 7 necessità di avere 6 rettangoli, o possono utilizzare 8 come il resto di loro? –
Devono avere 6 esattamente come nell'immagine. Ci sono altri disegni che mi piacerebbe realizzare quindi penso che dovremmo discuterne in chat, così posso mostrarvelo. :-) – MacaronLover
@BojanKseneman Mi è stato detto prima di non sovraccaricare l'attività con le visualizzazioni e che è meglio farlo in 1 classe. Sto pensando più al metodo '1 classe', tuttavia vedrei entrambi i metodi disegnati e sceglierò tra le 2 opzioni. – MacaronLover