2012-06-17 23 views
5

मैं वर्तमान में एक लाइव वॉलपेपर पर काम कर रहा हूं जो बहुत गहन है और स्क्रीन रोटेशन को बहुत अच्छी तरह से संभाल नहीं करता है।लाइव वॉलपेपर स्क्रीन रोटेशन

वास्तव में वॉलपेपर नष्ट हो गया है और बिना किसी कॉल किए बिना एक खाली स्क्रीन प्रदर्शित करता है!

यहाँ है कि मैं क्या onSurfaceChanged विधि के भीतर है:

@Override 
    public void onSurfaceChanged(SurfaceHolder holder, int format, 
      int width, int height) { 
     // TODO Auto-generated method stub 
     super.onSurfaceChanged(holder, format, width, height); 

     mRatio = (float) width/height; 
     if (mRatio > 1) { 
      orientation = 0; 
     } 
     if (mRatio < 1) { 
      orientation = 1; 
     } 
     setRunning(true); 
     Log.i(TAG, "Screen Rotation..."); 
     mHandle.post(r); 
    } 

मैं सकारात्मक नहीं लॉग संदेश है, क्योंकि इस विधि कहा जाता है नहीं प्राप्त करता हूँ।

यह क्यों हो रहा है और स्क्रीन रोटेशन को संभालने के लिए कुछ तकनीकें क्या हैं? क्या यह हो सकता है कि मेरा लाइव वॉलपेपर इतना गहन है कि शून्य को बुलाया नहीं जा सकता है?

इसके अलावा, onVisibilityChanged नहीं और साथ ही कहा जाता है और जब मैं एमुलेटर पर ऐप्लिकेशन खोलते हैं, वहाँ कोई लॉग संदेश है:

@Override 
    public void onVisibilityChanged(boolean visible) { 
     // TODO Auto-generated method stub 
     super.onVisibilityChanged(visible); 
     if (visible) { 
      setRunning(true); 
      Log.i(TAG, "Visible..."); 
      mHandle.postDelayed(r, 2000); 
     } else { 
      setRunning(false); 
      Log.i(TAG, "Invisible..."); 
      mHandle.removeCallbacks(r); 
     } 
    } 
+0

: onVisibilityChanged क्या आप नाम से उम्मीद होती है नहीं है क्या आप अधिक कोड पोस्ट कर सकते हैं? यह जानने की जरूरत है कि सभी भारी काम कहाँ किया जाता है। मेरे लाइव वॉलपेपर में, दोनों सर्फफेस और ऑन विज़िबिलिटी चेंजड को स्क्रीन रोटेशन के दौरान बुलाया जाता है। इसके अलावा, अभिविन्यास बदलने के दौरान "वॉलपेपर ऑफसेट करने के लिए टाइमआउट प्रतीक्षा" जैसे कुछ के लिए लॉगकैट की जांच करें। – Ole

उत्तर

1

अपने मेनिफ़ेस्ट में, की घोषणा:

<activity android:name=".YourActivityName" 
       android:configChanges="keyboardHidden|orientation" 
    </activity> 

आपका onSurfaceChanged - विधि को केवल configChanges घोषित करें - मैनिफेस्ट में योगदान दें!

अपने दूसरे मुद्दे के बारे में:

Called when the window containing has change its visibility (between GONE, INVISIBLE, and VISIBLE). Note that this tells you whether or not your window is being made visible to the window manager; this does not tell you whether or not your window is obscured by other windows on the screen, even if it is itself visible.

आप कि क्या आपके एप्लिकेशन "दृश्यमान" उपयोगकर्ता के लिए onPause() के माध्यम से है जांच करने की आवश्यकता है और onResume()

+0

प्रतिक्रिया के लिए धन्यवाद, मैं इस के लिए मेरे लाइव वॉलपेपर सेवा बदल: <सेवा एंड्रॉयड: नाम = "JuiceBarsWPService।" एंड्रॉयड: अनुमति = "android.permission.BIND_WALLPAPER" एंड्रॉयड: configChanges = "keyboardHidden | उन्मुखीकरण"> <आशय फिल्टर> <कार्रवाई एंड्रॉयड: नाम = "android.service.wallpaper.WallpaperService" /> <मेटा डेटा एंड्रॉयड: नाम = "android.service.wallpaper" एंड्रॉयड : संसाधन = "@ xml/mylwp" /> - और यह काम नहीं करता है :( – Denizen

+0

मेरी समस्या यह है कि मैं लगातार 20 आयताकार शुरू कर रहा हूं और 40 या तो यदि कोई के लिए बयान उन्हें नकल करना यदि प्रदर्शन किए गए एनिमेटिंग धीमे प्रदर्शन करते हैं तो भी कथन लगातार जांच रहे हैं – Denizen

+0

उपर्युक्त उत्तर लाइव वॉलपेपर पर लागू नहीं होता है, लेकिन SurfaceView का उपयोग कर अनुप्रयोगों के लिए। तो configChanges-विशेषता सेट करने से कुछ भी नहीं होगा। कृपया अधिक कोड पोस्ट करें .. – Ole

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