Ich erhalte eine leere Ansicht, wenn die Anwendung gestartet wird. Ich kann sehen, was in der XML-Vorschau angezeigt werden soll, aber wenn die Anwendung gestartet wird, ist es nur weiß. Ich kann den Umriss des SurfaceView sehen, aber es hat keinen Inhalt.Leere Ansicht, wenn Anwendung gestartet wird (SurfaceView)
Ich bin Autodidakt, also ist zugrundeliegendes Wissen begrenzt und möchte Antworten verstehen, also würde eine kurze Erklärung sehr geschätzt werden!
Danke - Frenchie.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.Frenchie.SurfaceView.MySurfaceView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="0dip"
android:id="@+id/surfaceView"/>
</LinearLayout>
MainActivity
package com.Frenchie.SurfaceView;
import ...
public class MainActivity extends Activity {
com.Frenchie.Drawing.MySurfaceView surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surfaceView);
}
}
MySurfaceView
package com.Frenchie.SurfaceView;
import ...
public class MySurfaceView extends SurfaceView implements Runnable {
private Bitmap bmp;
private SurfaceHolder holder;
public MySurfaceView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
Canvas c = holder.lockCanvas(null);
draw(c);
holder.unlockCanvasAndPost(c);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.player);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bmp, (MeasureSpec.getSize(getMeasuredWidth()) - bmp.getWidth())/2, (MeasureSpec.getSize(getMeasuredHeight()) - bmp.getHeight())/2, null);
}
@Override
public void run() {
//TODO movement here when display is working
}
}
Logcat
11-27 16:20:43.437 24092-24092/? I/zygote: Not late-enabling -Xcheck:jni (already on)
11-27 16:20:43.450 24092-24092/? W/zygote: Unexpected CPU variant for X86 using defaults: x86
11-27 16:20:43.804 24092-24092/com.Frenchie.SurfaceView I/InstantRun: starting instant run server: is main process
11-27 16:20:43.948 24092-24110/com.Frenchie.SurfaceView D/OpenGLRenderer: HWUI GL Pipeline
[ 11-27 16:20:44.001 24092:24110 D/ ]
HostConnection::get() New Host Connection established 0xa4329740, tid 24110
[ 11-27 16:20:44.005 24092:24110 W/ ]
Unrecognized GLES max version string in extensions: ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1
11-27 16:20:44.011 24092-24110/com.Frenchie.SurfaceView I/zygote: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
11-27 16:20:44.011 24092-24110/com.Frenchie.SurfaceView I/OpenGLRenderer: Initialized EGL, version 1.4
11-27 16:20:44.011 24092-24110/com.Frenchie.SurfaceView D/OpenGLRenderer: Swap behavior 1
11-27 16:20:44.013 24092-24110/com.Frenchie.SurfaceView D/EGL_emulation: eglCreateContext: 0xa43328a0: maj 2 min 0 rcv 2
11-27 16:20:44.018 24092-24110/com.Frenchie.SurfaceView D/EGL_emulation: eglMakeCurrent: 0xa43328a0: ver 2 0 (tinfo 0xaeb325d0)
11-27 16:20:44.104 24092-24110/com.Frenchie.SurfaceView D/EGL_emulation: eglMakeCurrent: 0xa43328a0: ver 2 0 (tinfo 0xaeb325d0)
11-27 16:20:45.783 24092-24092/com.Frenchie.SurfaceView V/StudioProfiler: StudioProfilers agent attached.
11-27 16:20:45.828 24092-24158/com.Frenchie.SurfaceView V/StudioProfiler: Acquiring Application for Events
11-27 16:20:45.849 24092-24092/com.Frenchie.SurfaceView V/StudioProfiler: Transformed class: java/net/URL
11-27 16:20:45.851 24092-24092/com.Frenchie.SurfaceView W/zygote: Current dex file has more than one class in it. Calling RetransformClasses on this class might fail if no transformations are applied to it!
11-27 16:20:46.312 24092-24092/com.Frenchie.SurfaceView V/StudioProfiler: Memory control stream started.
11-27 16:20:46.826 24092-24167/com.Frenchie.SurfaceView V/StudioProfiler: Live memory tracking disabled.
11-27 16:20:46.828 24092-24167/com.Frenchie.SurfaceView V/StudioProfiler: Live memory tracking enabled.
11-27 16:20:46.828 24092-24167/com.Frenchie.SurfaceView V/StudioProfiler: JNIEnv not attached
11-27 16:20:47.012 24092-24167/com.Frenchie.SurfaceView V/StudioProfiler: Loaded classes: 5094
11-27 16:20:47.416 24092-24167/com.Frenchie.SurfaceView V/StudioProfiler: Tracking initialization took: 588509880ns
Zögern Sie nicht, lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
Überprüfen Sie Ihre Logcat-Protokolle und fügen Sie sie dort hinzu, wenn Sie Ausnahmen sehen. –
Ich habe keine Ausgabe von der Logcat – Frenchie
, aber Sie sollten. Führen Sie Ihre App im Emulator mit dem angehängten logcat-Watcher aus oder sehen Sie [hier] (https://stackoverflow.com/questions/3359692/how-to-redirect-my-log-output-from-logcat-to-the-sd- card-on-and-android-device) über das Extrahieren von Protokollen vom eigentlichen Gerät. –