J'essaie de créer une structure de type arbre généalogique dans android. J'utilise la toile pour dessiner le rectangle et la ligne pour les noms des membres de la famille et la ligne de connexion.Plusieurs rectangles ne dessinent pas sur la toile
Je dessine un rectangle et ligne par la méthode suivante avec l'aide de link
DrawView.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.View;
public class DrawView extends View {
Paint paint = new Paint();
float mx, my, mdensity;
Paint mBGPaint, mTXTPaint,mLINEPaint,mBRDPaint;
String text;
public DrawView(Context context, float x, float y, float density, String text) {
super(context);
paint.setColor(Color.RED);
paint.setStrokeWidth(8);
paint.setStyle(Paint.Style.STROKE);
mx = x;
my = y;
mdensity = density;
this.text = text;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
init();
mLINEPaint.setStrokeWidth(8);
//draw rect border
canvas.drawRect(100, 100, 200, 200, mBRDPaint);
// //draw text
canvas.drawText(text, 150, 150, mTXTPaint);
// //draw line
float x = mx+150;
canvas.drawLine(x, 10, x, 100, mLINEPaint);
}
public void init() {
//rectangle background
mBGPaint = new Paint();
mBGPaint.setColor(Color.parseColor("#8"));
//your text
mTXTPaint = new Paint();
mTXTPaint.setColor(Color.parseColor("#123456"));
//your line
mLINEPaint = new Paint();
mLINEPaint.setColor(0xFFFF00FF);
//rectangle border
mBRDPaint = new Paint();
mBRDPaint.setStyle(Paint.Style.STROKE);
mBRDPaint.setStrokeWidth(10);
mBRDPaint.setColor(Color.parseColor("#8"));
}
}
Maintenant, je suis en train d'ajouter plusieurs vues LinearLayout à l'horizontale d'orientation comme ci-dessous:
Mais quand je fais cela, une seule vue est ajoutée au canevas et d'autres ne sont pas visibles.float density = getApplicationContext().getResources().getDisplayMetrics().density;
DrawView drawView;
float x = 100, y = 200;
int count1 = 1;
int id;
LinearLayout layout2 = new LinearLayout(this);
layout2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
layout2.setOrientation(LinearLayout.HORIZONTAL);
main_layout.addView(layout2);
DrawView drawView1;
CircleView circleView;
for (Map.Entry<String, ArrayList<String>> entry : map.entrySet()) {
String key = entry.getKey();
if (count1 < 2) {
x = dirButton.getX();
y = dirButton.getY();
}
drawView1 = new DrawView(this, x, y, density, key);
drawView1.setId(butId++);
drawView1.setLayoutParams(params);
layout2.addView(drawView1);
count1++;
x = x + 100;
}
Je n'ai aucune expérience dans le travail avec la toile dans Android, je serais heureux si quelqu'un pouvait me guider avec ce problème.
Votre toile doit être à l'intérieur de la vue et vous dessiner tout sur la toile via la méthode onDraw(). Vous ne devriez pas avoir besoin de plusieurs vues sur une toile. Chaque fois que vous devez mettre à jour le canevas, vous pouvez lancer l'appel invalidate() qui déclenchera onDraw(). –
Je pense que les deux rectangles sont dessinés à la même xy. Pouvez-vous vérifier cela ou faire un rectangle plus grand que l'autre et avoir des couleurs différentes pour le rectangle juste pour vérifier si les deux rectangles sont dessinés – surya
ne pas appeler votre init () 'dans' onDraw' – FunkTheMonk