hi ! hier mein code.
https://pastebin.com/XJ45FCHP
könnte mir wer erklären was ich falsch mache und was ich besser machen könnte.
danke im voraus !
hi ! hier mein code.
https://pastebin.com/XJ45FCHP
könnte mir wer erklären was ich falsch mache und was ich besser machen könnte.
danke im voraus !
Hallo
Eine erwas genauere Beschreibung deines Problems wäre schon hilfreich.
Was zeigt er nicht?
Welche eventuelle Fehlermeldung kommt?
hi danke schon mal.
Mein Bildschirm bleibt einfach schwarz anstatt zu zeichnen was ich eigl. zeichnen wollte.
Fehlermeldung kommt keine.
Wo bekomme ich den Canvas von meinem View ?
hab das jetzt so und leider bleibt der emulator immer noch schwarz.
evtl. mache ich was falsch...
surfaceview schein ich noch nicht ganz zu durchschauen.
package com.example.myapplication
import android.content.ContentValues.TAG
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.PointF
import android.util.Log
import android.view.MotionEvent
import android.view.SurfaceHolder
import android.view.SurfaceView
class CustomView(context: Context) : SurfaceView(context), SurfaceHolder.Callback {
private var customLoop: CustomLoop
//debug
private var recPos: PointF = PointF(0f, 0f)
private var paint: Paint = Paint()
init {
holder.addCallback(this)
customLoop = CustomLoop()
paint.color = Color.RED
}
override fun surfaceCreated(holder: SurfaceHolder) {
update()
}
override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
// event.getOrientation()
return super.onTouchEvent(event)
}
private fun update() {
while (customLoop.updateLoop()) {
Log.d(TAG, "hi !")
recPos.x += 1
renderer()
}
}
private fun renderer() {
val c = holder.lockCanvas()
c.drawColor(Color.CYAN)
c.drawRect(10f, 10f, 100f, 100f, paint)
holder.unlockCanvasAndPost(c)
}
}
Alles anzeigen
Wann wird die immer aufgerufen ?
Die Tooltip Info sagt mir das:
android.view.View Manually render this view (and all of its children) to the given Canvas. The view must have already done a full layout before this function is called. When implementing a view, implement onDraw(Canvas) instead of overriding this method. If you do need to override this method, call the superclass version.
Weil bei meiner Klasse wird die ja nie aufgerufen weil der main thread ja immer in meiner update schleife bleibt. somit nie da ankommt.
ich habe jetzt kein Beispiel in Kotlin bei der Hand.
class customView(context: Context) : SurfaceView(context), SurfaceHolder.Callback {
private var canvas: Canvas
private var customLoop: CustomLoop
//debug
private var recPos: PointF = PointF(0f,0f)
private var paint: Paint = Paint()
init {
holder.addCallback(this) // den hoder hast du dir nicht geholt willst in einfach benutzen.
customLoop = CustomLoop() // wo kommt das her?
canvas = Canvas() // ist auch falsch
paint.color = Color.RED
}
Alles anzeigen
Ja so wird die draw Methode nur einmal aufgrufen. Das Rechteck bewegt sich nicht.
Die Update Methode gehört in einen eigenen Thread. Der auch zwischendurch erwas wartet und der ui etwas Zeit gibt.
Wahrscheinlich wird wenn das Bildschirm Ende erreicht ist ein Fehler kommen.
In dem gameloop müsste er die Update Methode aufrufen. Da das wahrscheinlich ein Thread ist.
Hab noch mal ein bisschen rumprobiert. Bei mir bewegt sich jetzt das Quadrat.
class MainActivity : AppCompatActivity() {
class customView(context: Context) : SurfaceView(context), SurfaceHolder.Callback {
private var canvas: Canvas
//debug
private var recPos: PointF = PointF(0f,0f)
private var paint: Paint = Paint()
init {
holder.addCallback(this)
canvas = Canvas()
paint.color = Color.RED
}
override fun surfaceCreated(holder: SurfaceHolder) {
}
override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
return super.onTouchEvent(event)
}
fun loop() {
Thread{
while(true) {
Thread.sleep(100)
Log.d("huhu", "hi ! ${recPos.x}")
recPos.x += 5
canvas = holder.lockCanvas()
canvas.drawColor(Color.BLACK)
canvas.drawRect(recPos.x, 10f, recPos.x + 100f, 100f, paint)
holder.unlockCanvasAndPost(canvas)
}
}.start()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val view = customView(this)
setContentView(view)
view.loop()
}
}
Alles anzeigen
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!