Die Einstellung der Größe einer SurfaceView mit SurfaceHolder.setFixedSize(Breite,Höhe)
Als Teil meiner MainActivity-Klassen-layout habe ich ein SurfaceView:
<LinearLayout
android:id="@+id/screen_game"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0000FF"
android:orientation="vertical"
>
<Button
android:id="@+id/button15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<com.ecslayout.BackgammonBoardView
android:id="@+id/backgammonBoardView1"
android:layout_width="100dp"
android:layout_height="100dp" />
</LinearLayout>
Ich habe für meine SurfaceView ein Skelett Klasse (die ich ausgelassen habe, viel code, der Einfachheit halber). Innerhalb surfaceCreated bin ich versucht viele verschiedene Möglichkeiten
stellen Sie die Größe der Leinwand. Der canvas-Bereich nicht angezeigt werden ändern der Größe von 100dp x 100dp. Alle meine versuche Sie zu rufen setFixedSize zu haben scheinen keine Wirkung auf die Größe an alle:
public class BackgammonBoardView extends SurfaceView implements SurfaceHolder.Callback {
public BackgammonBoardView(Context context, AttributeSet attrs) {
super(context, attrs);
Log.d(TAG,"SurfaceView Constructor.");
//register out interest in hearing about changes to our surface
SurfaceHolder holder = getHolder();
holder.addCallback(this);
}
//The method is firing just fine. I have the surfaceCreated output from Log.d
@Override
public void surfaceCreated(SurfaceHolder arg0) {
//Has no effect on size
//this.getHolder().setFixedSize(500, 500);
//Has no effect on size
//arg0.setFixedSize(500, 500);
//Has no effect on size
//SurfaceHolder holder = getHolder();
//holder.setFixedSize(500, 500);
//Has no effect on size
/*getHolder().setFixedSize(500,
500);*/
//Causes Eclipse to enter Debug mode. It crashes the program
//android.widget.FrameLayout.LayoutParams params = new android.widget.FrameLayout.LayoutParams(500, 500);
//setLayoutParams(params);
thread.start();
Log.d(TAG,"SurfaceView. surfaceCreated.");
}
}
Einer meiner Fragen über setFixedSize ist, was die Einheiten tun, die Parameter der Funktion dar? Die int ist für dot Punkte oder vielleicht Pixel? Ich bin das Lesen der Dokumentation:
http://developer.android.com/reference/android/view/SurfaceHolder.html
allerdings heißt es nur, dass die Parameter für setFixedSize ganze zahlen sind. Ich sehe nicht ein, noch, wo Sie beschreibt, welche Einheiten die zahlen darstellen könnten. Bin ich vielleicht versuchen, die Größe der SurfaceView von einer schlechten Lage
oder ist es irgendein anderes problem? Ich bin die Entwicklung von targeting API 19 mit einem min-API von 9.
P. S. ich glaube, ich sehe was ist denn jetzt Los setFixedSize() ändert die Auflösung der Leinwand, nicht aber seine Breite und Höhe in das LinearLayout, wie ich wollte, zu tun. Ich habe die Bildschirm Breite und Höhe in dem code hinter, und was ich vorhabe zu tun ist, ändern Sie die Breite und Höhe der SurfaceView, wie Sie existiert, in der layout.
P. P. S. ich war in der Planung mit dem SurfaceView innerhalb einer ScrollView aber ich bin jetzt zu Lesen, dass der Ansatz vielleicht nicht möglich sein. Ich bin, herauszufinden, mehr von diesem Beitrag:
https://groups.google.com/forum/#!msg/android-developers/zkdnM0G225I/tt_FJGyOkB4J
Danke
setFixedSize()
in Aktion, siehe die "hardware-scaler exerciser" Aktivität in Grafika (github.com/google/grafika). Kurze demo hier: youtube.com/watch?v=qpRaD-ij2xcInformationsquelleAutor Eae | 2014-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie überschreiben die onSizeChanged () - Funktion der Klasse SurfaceView zu bekommen & legen Sie die Größe der Ansicht.
Wann immer die Display-Größe geändert hat, wird diese Klasse aufgerufen.
Auch bemerkte ich Ihre xml-code hat:
Dies ist der Grund, warum Sie können nicht ändern die Größe.
Als eine zweite alternative, können Sie die Größe festlegen, indem die layout-Parameter (nicht sicher, ob das funktioniert mit ScrollView):
Das ist bemerkenswert. Vielen Dank für dieses posting.
Du bist herzlich willkommen 🙂 froh, dass ich helfen konnte.
InformationsquelleAutor Jerry