onDraw() Linie dynamisch nach User Input zeichnen

  • Antworten:0
Tonslzi
  • Forum-Beiträge: 1

03.11.2012, 18:30:36 via Website

Hallo Liebe Entwicklergemeinde,

ich bin leider noch Anfänger, also nehmt es mir bitte nicht übel wenn ich mist gebaut habe :-)

Was ich machen will:
- zu meinem aktuellen Layout hinzufügen: Eine Darstellung von einem Button und einer Linie mit einer Canvas.
- Wenn der User den Button drückt (OnClickListener) soll die Linie z.B. in Ihrer Länge verändert werden.

Was nicht funktioniert:
- Die Linienlänge nach dem ersten Zeichnen der Grafik (der Linie) verändern.

Was bereits funktioniert:
- Canvas ist ins Layout integriert
- Beim Start wird die Linie mit dem Initialisierungswert gezeichnet

Logik nach der ich gearbeitet habe:
- Klasse Drawing implementiert, welche View erweitert und die Methode onDraw anpasst.
- in die Methode "onDraw()" den Methodenaufruf "invalidate()" eingefügt (dieser hällt die Methode "onDraw" in einer Schleife?)
- ein View im XML erstellt mit dem namen der Klasse Drawing
- Button im XML implementiert und onClickListener in meiner MainActivity gesetzt

Was ich nicht verstehe:
-Warum wird beim ersten Aufruf überhaupt die Zeichnung schon dargestellt?
Ich dachte die Klasse "Drawing" liefert nur den Container für zukünftige Objekte?
-Da ich kein Objekt Drawing besitze kann ich auch nicht die Länge zuweisen,

Probeweise habe ich auch folgenden Code in meine Activity eingefügt, hat aber nicht funktioniert:
Drawing myDrawing;
myDrawing=new Drawing(this,50);
myDrawing.setLength(200);

Der Code:

Layout.XML:
1<de.test.hello.Drawing
2 android:id="@+id/drawing1"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content"/>


Klasse Drawing.java:

1public class Drawing extends View {
2 Paint paint = new Paint();
3 private int linelength=0;
4 private boolean showDrawing=true;
5
6 public Drawing(Context context, int i) {
7 super(context);
8 paint.setColor(Color.BLUE);
9 }
10
11 public Drawing(Context context, AttributeSet attrs) {
12
13 super( context, attrs );
14 }
15
16 public Drawing(Context context, AttributeSet attrs, int defStyle) {
17
18 super( context, attrs, defStyle );
19 }
20
21 public void setLength(int i_laenge)
22 {
23 linelength=i_laenge;
24 }
25
26 @Override
27 protected void onDraw(Canvas canvas) {
28 canvas.drawLine(10, 10, linelength, 50, paint);
29 invalidate();
30 }
31
32}

und meine Activity:
1@Override
2 public void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4
5 setContentView(R.layout.activity_hello_workshop);
6 }

Zur Info: zur Übersichtlichkeit habe ich für das Problem nicht relevante codezeilen entfernt

— geändert am 03.11.2012, 18:34:46

Antworten