Anwendung mit Canvas startet nicht

  • Antworten:6
jonatan kunst
  • Forum-Beiträge: 3

18.06.2014, 19:57:24 via Website

Erst einmal Hallo!
Ich habe ein Problem.
Ich wollte nur mal probehalber auf einer Canvas zeichnen.
Dazu habe ich folgenden Code kopiert:

Das ist meine Draw.java:

package com.example.turtle;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class Draw extends Activity {
    DrawView drawView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set full screen view
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                                         WindowManager.LayoutParams.FLAG_FULLSCREEN);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        drawView = new DrawView(this);
        setContentView(drawView);
        drawView.requestFocus();
    }
}

Das ist meine DrawView.java:

package com.example.turtle;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class DrawView extends View implements OnTouchListener {
    private static final String TAG = "DrawView";

    List<Point> points = new ArrayList<Point>();
    Paint paint = new Paint();

    public DrawView(Context context) {
        super(context);
        setFocusable(true);
        setFocusableInTouchMode(true);

        this.setOnTouchListener(this);

        paint.setColor(Color.WHITE);
        paint.setAntiAlias(true);
    }

    @Override
    public void onDraw(Canvas canvas) {
        for (Point point : points) {
            canvas.drawCircle(point.x, point.y, 5, paint);
            // Log.d(TAG, "Painting: "+point);
        }
    }

    public boolean onTouch(View view, MotionEvent event) {
        // if(event.getAction() != MotionEvent.ACTION_DOWN)
        // return super.onTouchEvent(event);
        Point point = new Point();
        point.x = event.getX();
        point.y = event.getY();
        points.add(point);
        invalidate();
        Log.d(TAG, "point: " + point);
        return true;
    }
}

class Point {
    float x, y;

    @Override
    public String toString() {
        return x + ", " + y;
    }
}

Wenn ich das Programm nun von Eclipse aus starte, steht unten rechts nur kurz, dass das Programm gestartet wird. Weder auf meinem Handy noch auf dem Emulator passiert etwas.
Andere Programme funktionieren hingegen.

Wisst ihr, wo der Fehler liegt? Da der Quellcode ja nur kopiert ist, kann an dem ja nichts verkehrt sein. Es wird auch auf dem Handy keine Verknüpfung zu dem Programm angelegt, wie es sonst immer passiert, wenn ich etwas aus Eclipse starte.

Ich hoffe, Ihr könnt mir helfen. Das macht einen ja völlig verrückt, wenn es einfach grundlos nicht funktioniert.

Antworten
Andreas S.
  • Forum-Beiträge: 76

18.06.2014, 20:10:38 via App

setWillNotDraw(false);

ups net genau gelesen sry

— geändert am 18.06.2014, 20:14:11

Antworten
jonatan kunst
  • Forum-Beiträge: 3

19.06.2014, 19:26:33 via Website

Kann mir denn niemand weiterhelfen??

Gibt es irgendwo denn ein wirklich gutes Tutorial, das er mir empfehlen kann?

Antworten
Andy N.
  • Forum-Beiträge: 22.375

19.06.2014, 19:42:01 via Website

Hallo jonatan,

Bitte nicht pushen, gib doch der Community bitte etwas Zeit - ich bin mir sicher, dass sich hier jemand melden wird, sobald er /sie eine Antwort für dich hat

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

Antworten
Georg C.
  • Forum-Beiträge: 235

20.06.2014, 19:09:22 via Website

Hallo,
das Grundsatz auf Canvas zu schreiben ist:

String [] data = {
Copy Paste code rein, klaro wird es schon was sein,
Java lernen nicht mein Fall, Forums gibt es überall ... };


Paint paint = new Paint(); 
paint.setColor(Color.WHITE); 
paint.setStyle(Style.FILL); 
canvas.drawPaint(paint); 

paint.setColor(Color.BLACK); 
paint.setTextSize(20); 
canvas.drawText(data[2], 10, 25, paint);

Das wars schon!
Vermute jedoch, damit wird es Dir nicht geholfen.

Wisst ihr, wo der Fehler liegt? Da der Quellcode ja nur kopiert ist,
kann an dem ja nichts verkehrt sein.

Genau dar -> " ... Da der Quellcode ja nur kopiert ist ... " befinden sich die Fehler.
Du / Ihr kopiert irgendwelchen Code- ausschnitte (OHNE ZU WISSEN was es bewirkt) und hofft auf´s Glück, dass es Funktioniert.

Das macht einen ja völlig verrückt, wenn es einfach grundlos nicht
funktioniert.

Grundlos ist ein gutes Stichwort. ... Lerne wenigstens die Grundlagen, dann Klappt es.

LG
Georg

Ps.
Dir fehlt das Paint- Objekt als Kontext- übergabe. Sehe oben -> canvas.drawPaint(paint)
Ob deine Kreise gezeichnet werden ist jedoch fraglich.

Sorry für Gramatik & Stilistik Fehler.

Antworten
jonatan kunst
  • Forum-Beiträge: 3

20.06.2014, 19:48:28 via Website

Ich studiere Informatik im 4. Semester. Ich kann Java. ;) Nur mit Android Programmierung habe ich
jetzt erst angefangen.
Außerdem war der eigentliche Fehler, dass meine Anwendung weder startet noch installiert wird.

Ich weiß jetzt nicht, was genau du geändert hast. Das Paint - Objekt ist ja global und die Canvas
benutzt es. Der Befehl canvas.drawPaint ist nicht notwendig. Bei der Methode drawLine wird
das Paint - Objekt als Parameter übergeben.

Ich habe aber es aber mittlerweile zum Laufen bekommen und habe nochmals ein neues
Projekt erstellt.
Außerdem: mit "grundlos" war gemeint, dass Eclipse sich plötzlich verhält, wie es will, ohne
dass mein Programm startet. Es hätte zumindest starten müssen oder eine Exception werfen
müssen.

Aber vielen Dank für die Antwort :)

PS: Bevor man anderen Unwissen vorwirft, sollte man sich vielleicht erst an die eigene Nase
packen.

Antworten
Georg C.
  • Forum-Beiträge: 235

21.06.2014, 08:35:11 via Website

Hallo,
UPPS;
Dein Threadstitle wie auch weiterhin die Beschreibung hat mich etwas irritiert, bzw. ich soll mehr auf den Code achten.
...

Bevor man anderen Unwissen vorwirft, sollte man sich vielleicht erst
an die eigene Nase packen.

Da hast Du sicherlich recht!
SORRY!

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten