Auf SurfaceView zeichnen

S

Sabbert

Neues Mitglied
0
Guten Tag zusammen,

Ich versuche auf einem SurfaceView via Canvas zu zeichnen, jodoch ohne erfolg bis jetzt.

Wenn ich die App starte bleibt Sie einfach schwarz und nichts passiert.

Ich habe versucht eine SurfaceView und einen Thread zu erstellen, der alle 50ms den SurfaceView neu zu zeichnen.
Als Test soll einfach nur ein Kreis gezeichnet werden.

Beim Start der App setzte ich vie setContentView(View) auf das SurfaceView um.

Code:
package de.surface.test;

import android.app.Activity;
import android.os.Bundle;

public class SurfaceTestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        DrawView view = new DrawView(this);
        
        setContentView(view);
    }
}
Code:
package de.surface.test;

import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class DrawView extends SurfaceView implements Callback {
    private SurfaceHolder holder;
    private Canvas canvas;
    
    public DrawView(Context context) {
        super(context);
        holder = this.getHolder();
        holder.addCallback(this);
        draw();
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int width,    int height) {
        
    }
    public void surfaceCreated(SurfaceHolder holder) {
        
    }
    public void surfaceDestroyed(SurfaceHolder holder) {
        
    }
    
    private void draw() {
        new Thread() {
            public void run() {
                canvas = holder.lockCanvas();
                if(canvas != null) {
                    try {
                        canvas.drawCircle(50, 50, 50, null);
                    } finally {
                        holder.unlockCanvasAndPost(canvas);
                    }                
                }
                
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }   
            }
        };
    }    
}
Ich hoffe ihr könnt mir helfen oder Tipps geben :)

lg
 
Also wenn ich das machen dann sehe ich ganz klar einen Kreis mit der Farbe null auf meinem Display, funktioniert 1A. :)
 
Jetzt ehrlich oO :D
Also ich benutze den Android Emulator in Eclipse, da ich zurzeit kein Testgerät zur Hand habe könnte es daran liegen?!

Also bei mir passiert einfach nichts...
 
Ich hab mich da etwas unpräzise ausgedrückt sorry.
Was ich meinte war:
canvas.drawCircle(50, 50, 50, null);
Du brauchst ein Paint wenn du was sehen willst und nicht 'null'.
 
Zuletzt bearbeitet:
So erstmal ein dickes Danke für deine Hilfe ;-)
Habs endlich hinbekommen :D

Hattest recht da fehlte das Paint :D. Und außerdem hatte ich vergessen den Thread zu starten. :D

Hier der Code:
Code:
package de.surface.test;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class DrawView extends SurfaceView implements Callback {
    private SurfaceHolder holder;
    private Canvas canvas;
    private Paint paint;
    private Thread th;
    private boolean isRunning = false;
    
    public DrawView(Context context) {
        super(context);
        init();        
    }
    
    public void init(){
        
        holder = this.getHolder();
        holder.addCallback(this);
        paint = new Paint();
        paint.setColor(Color.WHITE);       
        
        //Thread zum Zeichnen
        new Thread(new Runnable() { 
            public void run(){                 
                while(isRunning)
                {
                    draw(canvas);
                    try{
                        Thread.sleep(50);
                    } catch (InterruptedException e){}
                }         
             
            }
        }).start();
        
        isRunning = true;
    }
    
    public void surfaceChanged(SurfaceHolder holder, int format, int width,    int height) {
        
    }
    public void surfaceCreated(SurfaceHolder holder) {
        
    }
    public void surfaceDestroyed(SurfaceHolder holder) {
        
    }
    
    public void draw(Canvas c) {     
        c = holder.lockCanvas();
        if(c != null) {
                   
            c.drawColor(Color.GREEN);
            c.drawCircle(50, 50, 50, paint);                        
                    
            holder.unlockCanvasAndPost(c);
        }
                                  
    }
}
 
Hallo zusammen.
Ich wollt wegen meines Problem nicht einen neuen Thread aufmachen, von daher...
Auch bei mir bleibt der Screen im Surfaceview schwarz. Aber ich habe zwei Activities. Activity1 bekommt als content ein layout-xml-file und navigiert zu Activity2, welche ich so wie in

Android Game Programming 3

aufgebaut habe. Der Thread läuft (logging in onDraw) aber es ist eben alles schwarz.

Eine Seite davor im Tutorial wird noch kein Thread verwendet. Da wird das Bitmap noch korrekt gezeichnet.
Hat wer eine Idee?
Vielen Dank.
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
130
swa00
swa00
B
Antworten
4
Aufrufe
493
bb321
B
Zurück
Oben Unten