A
Antdoit
Neues Mitglied
- 1
Hallo,
zur Zeit ärgere ich mich ein bisschen mit SurfaceViews herum.
Meine Klasse DrawingView erbt von SurfaceView. In der XML Datei hab ich ein Objekt vom Typ DrawingView angelegt:
In der MainActivity hol ich mir die DrawingView mittels:
Beim Drücken eines Buttons soll das passieren:
Hier übergebe ich der Funktion "render" die DrawingView um darauf zu zeichnen. "render" malt dann verschiedene Pixel mit "drawPoint".
Natürlich hol ich mir beim Start der Funktion erstmal den SurfaceHolder und dann das Canvas:
Wenn ich fertig bin mit dem Zeichnen poste ich das canvas:
Trotzdem bekomme ich beim Start der App die Meldung:
Edit: Okay, nach ein bisschen lesen hab ich in der render-Funktion eine temporäre Bitmap erstellt die als Canvas dient. Nach der Zeichnung wird das Canvas zurückgegeben:
Außerdem hab ich die DrawingView nun public gemacht:
Der Wert wird in der MainActivity OnCreate zugewiesen:
trotzdem kommt die gleiche Meldung:
Wie kann ich in meiner MainActivity auf der DrawingView zeichnen?
zur Zeit ärgere ich mich ein bisschen mit SurfaceViews herum.
Meine Klasse DrawingView erbt von SurfaceView. In der XML Datei hab ich ein Objekt vom Typ DrawingView angelegt:
Code:
<com.example.standardbenutzer.adelpath.DrawingView
android:id="@+id/drawSurface"
android:layout_width="128px"
android:layout_height="128px"
android:layout_centerInParent="true"
/>
In der MainActivity hol ich mir die DrawingView mittels:
Code:
final DrawingView view = (DrawingView)findViewById(R.id.drawSurface);
Beim Drücken eines Buttons soll das passieren:
Code:
btn_left.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Camera = new Vector3D(Camera.x - 0.25f, Camera.y, Camera.z);
render(view);
}
});
Hier übergebe ich der Funktion "render" die DrawingView um darauf zu zeichnen. "render" malt dann verschiedene Pixel mit "drawPoint".
Natürlich hol ich mir beim Start der Funktion erstmal den SurfaceHolder und dann das Canvas:
Code:
public void render(DrawingView surface){
SurfaceHolder holder = surface.getHolder();
Canvas canvas = holder.lockCanvas();
}
Wenn ich fertig bin mit dem Zeichnen poste ich das canvas:
Code:
holder.unlockCanvasAndPost(canvas);
Trotzdem bekomme ich beim Start der App die Meldung:
java.lang.IllegalArgumentException: canvas object must be the same instance that was previously returned by lockCanvas
Edit: Okay, nach ein bisschen lesen hab ich in der render-Funktion eine temporäre Bitmap erstellt die als Canvas dient. Nach der Zeichnung wird das Canvas zurückgegeben:
Code:
public Canvas render(){
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
}
Code:
btn_bottom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Camera = new Vector3D(Camera.x, Camera.y, Camera.z + 0.25f);
view.surfaceHolder.unlockCanvasAndPost(render());
}
});
Außerdem hab ich die DrawingView nun public gemacht:
Code:
public DrawingView view = null;
Der Wert wird in der MainActivity OnCreate zugewiesen:
Code:
view = (DrawingView)findViewById(R.id.drawSurface);
trotzdem kommt die gleiche Meldung:
java.lang.IllegalArgumentException: canvas object must be the same instance that was previously returned by lockCanvas
Wie kann ich in meiner MainActivity auf der DrawingView zeichnen?
Zuletzt bearbeitet: