2012-02-20 10 views
6

मेरे पास SurfaceView के निर्माण के संबंध में एक प्रश्न है और इसके बाद से एनेविटविंडो प्राप्त हो रहा है। पूछने के लिए

SurfaceView और ANETWindow

  • onCreate()
  • onStart()

कारण::

  1. यह उचित

    mSurfaceView = new SurfaceView(this); में क्या करना है मैं इसे समझने के रूप में SurfaceView नष्ट हो जाएगा जब हम फोकस खो देते हैं (कुछ और टी को कवर करता है वह पूरी स्क्रीन) इसलिए जब भी हम फोकस प्राप्त करेंगे (ऑनस्टार्ट() निष्पादित किया जाता है तो हमें इसे फिर से बनाना होगा)। या SurfaceView निष्क्रिय और पुन: प्रयोज्य रहता है?

    1. आगे बढ़ते हुए, अब मैं ऊपर उल्लिखित सतह (मूल कोड में) से मूल विंडो बनाना चाहता हूं। पूछने के लिए

      • onSurfaceCreated_native(..., jobject surface)
      • onSurfaceChanged_native(..., jobject surface)

    कारण:: यह उचित

    ANativeWindow* newwindow = ANativeWindow_fromSurface(jniEnv, joSurface) में क्या करना है onSurfaceChanged हमेशा के बाद onSurfaceCreated तो हम करने के लिए के रूप में एक विकल्प है कहा जा रहा है जब मूल खिड़की बनाने के लिए। एक ओर, यह onSurfaceCreated में ऐसा करने के लिए तार्किक प्रतीत होता है, लेकिन दो jobject surface विभिन्न ऑब्जेक्ट्स का संदर्भ देने लगते हैं! (एक कमजोर वैश्विक रेफरी बनाने onSurfaceCreated में सतह के लिए और दोनों बातिल और onSurfaceChanged में सतह के खिलाफ चेक करके उसे जाँच के रूप में, नीचे दिए गए कोड को देखने)

    onSurfaceCreated_native(JNIEnv env, ... ,jobject surface) {
    myWeakObjectGlobal = env->NewWeakGlobalRef(surface);
    }

    onSurfaceChanged_native(JNIEnv env, ... ,jobject surface) {

    if (env->IsSameObject(surface, myWeakObjectGlobal)) { 
        LOGW("onSurfaceChanged_native: new surface is SAME as old surface"); 
    } else { 
        LOGW("onSurfaceChanged_native: new surface is DIFFERENT as old surface"); 
    } 
    
    if (env->IsSameObject(NULL, myWeakObjectGlobal)) { 
        LOGW(" furthermore, old surface is NULL"); 
    } else { 
        LOGW(" furthermore, old surface is NOT null"); 
    } 
    

    }

    इसलिए, यदि वास्तव में दो अलग-अलग सतह वस्तुओं को सफ़रक्रेटेड और ऑनसफेस चेंज में भेजा जा रहा है, तो हम सबसे ताजा सतह का उपयोग करना चाहते हैं और एक बाली सतह संदर्भ पर लटका नहीं चाहते हैं, और इसके परिणामस्वरूप एनाइटविंडो_फ्रॉम_Surface को ऑनफैस चेंज में किया जाता है।

    अगर कोई मेरे लिए इस मुद्दे पर कुछ प्रकाश डाल सकता है तो मैं वास्तव में इसकी सराहना करता हूं।

+0

क्या आपने कभी यह पता लगाया है? मैं ओपनजीएल और जावा के बीच एक सतह साझा करने की कोशिश कर रहा हूं, एनीटिव विन्डो ऐसा करने का एकमात्र उचित तरीका है – ephemer

उत्तर

0

क्या आपने android.view.SurfaceView के बजाय android.view.Surface का उपयोग करने का प्रयास किया है?

संबंधित मुद्दे