Also ich weiß, es gibt eine Menge Fragen wie diese, aber keine der Antworten hatte irgendeine Wirkung.Android: Benutzerdefinierte Ansicht zeichnet
Ich habe eine benutzerdefinierte View
, die ich versuche, in eine ScrollView
(alle programmatisch) zu setzen. Die ScrollView
selbst funktioniert gut, ist, wo es sein muss, tut, was es tun soll, und wenn es getestet wird, indem man eine TextView
hinzufügt, tat es immer noch, was es sollte.
Allerdings, wenn ich meine benutzerdefinierte View
erstellen die Zeichnung nicht und es ist, als ob nichts da ist. Die draw(Canvas canvas)
Methode wird nie aufgerufen (auch mit onDraw
versucht, obwohl ich nicht weiß, was der Unterschied ist, aber es hat immer noch nicht funktioniert).
Ich habe Dinge wie setWillNotDraw(false)
im Konstruktor versucht, genannt View.invalidate()
jedes Mal, wenn ich es zeichnen/neu zeichnen möchte, scheint nichts zu arbeiten.
Hier ist der relevante Code:
Scroll Initialized
sv = new ScrollView(env.getContext());
ScaledBounds sb = UsefulMethods.getScaledBounds(50, 200, BBEnvironment.WIDTH - 100, BBEnvironment.HEIGHT - 300);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(sb.getWidth(), sb.getHeight());
sv.setTranslationX(sb.getX());
sv.setTranslationY(sb.getY());
sv.setLayoutParams(params);
sv.setScrollbarFadingEnabled(false);
sv.setScrollBarSize(0);
sv.setBackgroundColor(Color.argb(150, 0, 255, 0));
Benutzerdefinierte Ansicht Klasse
private class LevelSelectionView extends View {
private ArrayList<LevelButton> levelButtons;
public LevelSelectionView(Context context) {
super(context);
levelButtons = new ArrayList<LevelButton>();
int x = 20;
int y = 20;
for(int i = 0; i < 20; i++) {
levelButtons.add(new LevelButton(x, y, 100, 100, 10, i + 1));
levelButtons.get(i).unlock();
x += 100 + 20;
}
setWillNotDraw(false);
}
public void draw(Canvas canvas) {
super.draw(canvas);
System.out.println("is being called"); //except it isn't
Paint paint = new Paint();
paint.setAntiAlias(env.getCurrentSettings().getAntialias());
for(LevelButton lb : levelButtons)
lb.drawObject(canvas, paint);
}
}
Erstellen und Hinzufügen von benutzerdefinierten Ansicht
LevelSelectionView lsView = new LevelSelectionView(sv.getContext());
lsView.setLayoutParams(new RelativeLayout.LayoutParams(sv.getLayoutParams().width, 1000));
lsView.setBackgroundColor(Color.argb(150, 0, 0, 255));
sv.addView(lsView);
Warum zeichnet es nicht und wie bekomme ich es zu zeichnen?
Wie haben Sie 'View' zu ScrollView hinzugefügt? Hast du versucht, die Farbe variabel zu setzen? Funktioniert die benutzerdefinierte Ansicht separat in XML? – emiraslan
@emiraslan sieht aus wie ich etwas Code geschnitten habe. Die 'Ansicht' wird' 'ScrollView' 'mit' sv.addView (lsView) 'hinzugefügt. Hinweis: relevanten Code hinzugefügt – Ryan
Sie sollten onDraw (Canvas) überschreiben anstatt zeichnen. Können Sie den Code hinzufügen, in dem Sie das CustomView erstellen und dem ScrollView hinzufügen? – Eselfar