Android için bir Bilgi Görselleştirme API'si yazıyorum ve özel bir GLSurfaceView
'un iki birimini bir Mizanpaja yerleştirmeye çalışırken bir sorunla karşılaştım. Bu noktada Özel GLSurfaceView
, özel yöntemlerin neden olduğu olası hataları ortadan kaldırmak için GLSurfaceView
'un bir uzantısıdır.Birden çok GLSurfaceView bileşenini aynı Düzen'de nasıl kullanabilirim?
Her iki bileşenin de düzeni eklediğimde ve uygulamayı başlattığımda çalışır. Ama hiçbir şey çizilmez, sonsuz bir döngüye girmiş gibi görünür. Çünkü Renderers içindeki hata ayıklama mesajları LogCat'a yazdırılır. Ancak, yalnızca özel GLSurfaceView
bileşenlerinden birini kullanırsam, gayet iyi çalışır.
GLSurfaceView
kullanmada bir sorun olduğunu okumak ve aynı anda bu bileşenlerin iki kullanırken aynı zamanda geçerlidir varsayalım. Ben
here gönderilen geçici çözüm denedim ama işe yarayacak gibi görünmüyor.
Herhangi bir yardım için minnettarım. Daha iyi bir performans için openGL kullanmayı tercih ediyorum, ancak birden fazla bileşeni aynı anda kullanamıyorsam, bunun yerine Canvas kullanmam gerektiğini düşünüyorum.
şöyle tezahür görünür: Aktivite itibaren
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="@string/hello" android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.syntronic.vtadlib.VisualizationView android:id="@+id/glview"
android:layout_width="fill_parent" android:layout_height="300px" />
<TextView android:text="@string/hello" android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.syntronic.vtadlib.VisualizationView android:id="@+id/glview2"
android:layout_width="fill_parent" android:layout_height="fill_parent" />
</LinearLayout>
</LinearLayout>
kod şu şekildedir:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSurfaceView = (VisualizationView) findViewById(R.id.glview);
mSurfaceView2 = (VisualizationView) findViewById(R.id.glview2);
//Enables debug flags for Errors
//mSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR);
//mSurfaceView2.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR);
mSurfaceView.setRenderer(new CoordinateSystemRenderer());
mSurfaceView2.setRenderer(new CoordinateSystemRenderer());
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
mSurfaceView.onPause();
mSurfaceView2.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
mSurfaceView.onResume();
mSurfaceView2.onResume();
}
ben belirgin bir şey eksik? Ya da birisi neden çalışmadığını açıklayabilir mi?
Bana atlayan ilk şey, iç içe geçmiş LinearLayout öğenizin fill_parent olarak ayarlanmış olmasıdır. GLSurfaceView'larınızın her ikisinin de sıfır olmayan yükseklikle yerleştirildiğinden emin olmak için kontrol ederdim. Her ikisinin de çiziminde olduğu, ancak birinin 0 piksel yüksekliğinde olduğu ve bu nedenle görünmez olduğu durum söz konusu olabilir. –
İki "GLSurfaceViews" yerine, bir GL iş parçacığı ve bağlamı oluşturmak/yönetmek için daha iyi olabilir, bunu iki "SurfaceViews" (GLSurfaceViews) öğesine uygulamayın). [Fadden'ın tartışması ve Grafika'ya bağlantı] konusuna bakın (http://stackoverflow.com/a/22746240/199364). – ToolmakerSteve