2015-04-28 7 views
5

में खींचती है तो मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं जिसमें मैं एक जीआईएफ छवि प्रदर्शित करने की कोशिश कर रहा हूं। इसके लिए मैं मूवी क्लास का उपयोग कर रहा हूं और एक क्लास GIFView बनाया जो दृश्य को बढ़ाता है। मुझे Movie.decodeFile विधि से मूवी इंस्टेंस मिल रहा है।एंड्रॉइड त्रुटि सिग्नल 11 जब कोई मूवी कैनवास

मुझे मूवी.draw (कैनवास) कहा जाता है जब मुझे एक त्रुटि मिल रही है।

04-28 13:44:18.001: A/libc(24883): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 24883 (mple.channel002) 

वहाँ चिंतित कोड है:

public void setGif(File gif) 
    { 
     movie = Movie.decodeFile(gif.getAbsolutePath()); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     super.draw(canvas); 
     canvas.drawColor(0xFFCC3C6C);    

     if(movie != null) 
     { 
      if(movieStart == 0) 
       movieStart = android.os.SystemClock.uptimeMillis(); 
      int duration = Math.max(movie.duration(), 1000); 
      movie.setTime((int)(duration - ((android.os.SystemClock.uptimeMillis() - movieStart)%duration))); 

      movie.draw(canvas, 10, 10);//TODO CRASH 

      invalidate(); 
     } 
    } 

मैं मुख्य में एक GIFView बनाने के लिए, setGIF विधि ऊपर कॉल यह पथ देने के लिए और FillParent पैरामीटर के साथ लेआउट में जोड़ने के लिए। यह तब काम करता है जब मैं छवि छवि में इस छवि को प्रिंट करता हूं। जीआईएफ के बजाय कैनवास में एक ड्रॉइंग ड्राइंग भी काम करता है। तो समस्या मूवी इंस्टेंस से संबंधित है।

मैं GIFView बनाने के लिए इन लिंक का इस्तेमाल किया http://weavora.com/blog/2012/02/07/android-and-how-to-use-animated-gifs/

मैं भी यह इस तरह से है, लेकिन movie.draw पर एक ही त्रुटि की कोशिश की Info about the Movie class for Android

EDIT1: मुझे क्या करना एक विपक्ष पर अपने परीक्षणों पर 7a का पता लगाएं एंड्रॉइड 4.4.2/स्नैपड्रैगन 801/2 जीबी movie.draw (कैनवास, 10, 10) को movie.draw (कैनवास, 10 एफ, 10 एफ) में बदलना कुछ भी नहीं बदलता है।

EDIT2: मैं सिर्फ एंड्रॉयड 2.3.5 के साथ एक पुराने जेडटीई डिवाइस पर परीक्षण किया है और यह काम किया .. जब Find7a डिवाइस पर शुरू करने तो कुछ गलत है, लेकिन मैं क्या :(

+0

मैं समाधान पता नहीं है, लेकिन मैं इस समस्या के बारे में कुछ सवाल हैं: हम अपने क्रम पर्यावरण के बारे में कुछ पता है अगली पंक्ति का उपयोग करें? क्या आप इसे एमुलेटर, या फोन पर परीक्षण करते हैं? मैंने यह भी देखा कि movie.draw int की बजाय फ्लोट के लिए इंतजार कर रहा है। क्या आपने फ्लोट नंबरों के साथ प्रयास किया था? जैसे: movie.draw (कैनवास, 10 एफ, 10 एफ); – kisstajmi

+0

मैं एंड्रॉइड 4.4.2/स्नैपड्रैगन 801/2 जीबी पर ओप्पो ढूंढ 7 ए पर अपना परीक्षण करता हूं और movie.draw (कैनवास, 10, 10) को movie.draw (कैनवास, 10 एफ, 10 एफ) में बदलना कुछ भी नहीं बदलता है। – Vrong

+0

शायद ओएस या सटीक डिवाइस के साथ कोई समस्या है। अगर यह संभव है तो कृपया इसे एमुलेटर में आज़माएं। आप डिवाइस विशिष्ट समस्याओं की भी खोज कर सकते हैं। – kisstajmi

उत्तर

5
को समझ नहीं सकता !

अंत मैं इस सवाल का जवाब मिल गया है, ऐसा लगता है कि कुछ Android संस्करण या उपकरणों हार्डवेयर पर त्वरण अक्षम होने की जरूरत है
मैं बस अपना प्रकट करने के लिए इस इस कहा:।

<application android:hardwareAccelerated="true" ...> 

मोर हार्डवेयर त्वरण को सक्षम/अक्षम करने के बारे में ई जानकारी here मिल सकती है।

5

मुझे एक और समाधान मिला - आपको केवल इस विशिष्ट दृश्य पर हार्डवेयर त्वरक को अक्षम करना होगा जिसे आप मूवी खींचते हैं।

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

संदर्भ (दृश्य स्तर) https://developer.android.com/guide/topics/graphics/hardware-accel.html#controlling

+0

यह 1 मेरे लिए काम किया। – Braj

+0

दोस्त धन्यवाद। जब मैंने पहली बार लॉलीपॉप में अपना ऐप चलाया तो मेरे दिल ने एक हरा छोड़ा। –

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