2013-04-05 11 views
10

मैं एंड्रॉइड के लिए नया हूं और मुझे अपने लेआउट की पृष्ठभूमि में एनिमेटेड .gif फ़ाइल खेलने में परेशानी हो रही है। जब मैं एप्लिकेशन चलाता हूं तो पृष्ठभूमि एनिमेटेड .gif का एक फ्रेम है, बस एक तस्वीर की तरह। मैंने मुख्य रूप से दो क्षेत्रों में शोध किया है:एनिमेटेड जीआईएफ पृष्ठभूमि के रूप में एंड्रॉइड

नीचे दिया गया लिंक है जहां मुझे सबसे अधिक सहायता मिली है।

Android OS Beginning BlogSpot

लिंक नीचे मुझे लगता है कि त्रुटियों मैं प्राप्त कर रहा वर्गों के साथ कुछ करने के लिए है करने के लिए निजी, सार्वजनिक, या संरक्षित स्थापित किया जा रहा बनाता है।

Java Forums

और यहाँ कोड है ------------------------------------- -------------------------------------------------- ----------------------------

त्रुटियों को कोड के नीचे पूर्ण विवरण के साथ :: ERROR # :: द्वारा दर्शाया गया है।

import java.io.InputStream; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Movie; 
import android.view.Menu; 
import android.view.View; 

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 

     super.onCreate(savedInstanceState); 

     setContentView(new MYGIFView()); :: ERROR 1 :: 
} 
} 

private class MYGIFView extends View{ :: ERROR 2 :: 
    Movie movie,movie1; 
    InputStream is=null , is1=null; 
    long moviestart; 
    public GIFView(Context context) { :: ERROR 3 :: 

     super(context);     :: ERROR 4 :: 

     is=context.getResources().openRawResource(R.drawable.swing); 

     movie=Movie.decodeStream(is); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    canvas.drawColor(Color.WHITE); 
    super.onDraw(canvas); 
    long now=android.os.SystemClock.uptimeMillis(); 
    System.out.println("now="+now); 
    if (moviestart == 0) { // first time 
    moviestart = now; 

} 

System.out.println("\tmoviestart="+moviestart); 
int relTime = (int)((now - moviestart) % movie.duration()) ; 
System.out.println("time="+relTime+"\treltime="+movie.duration()); 
movie.setTime(relTime); 
movie.draw(canvas,this.getWidth()/2-20,this.getHeight()/2-40); 
this.invalidate(); 

} 
} 

:: त्रुटियों को सूचीबद्ध :: त्रुटियों को सूचीबद्ध :: त्रुटियों को सूचीबद्ध :: त्रुटियों को सूचीबद्ध :: त्रुटियों को सूचीबद्ध :: त्रुटियों को सूचीबद्ध ::

:: त्रुटि 1 :: निर्माता MYGIFView() नहीं है दिखाई

:: त्रुटि 2 :: अंतर्निहित सुपर निर्माता देखें() दिखाई निर्माता

:: त्रुटि विधि के लिए 3 :: वापसी प्रकार

याद आ रही है :: त्रुटि 4 के लिए अपरिभाषित है :: कन्स्ट्रक्टर कॉल कन्स्ट्रक्टर

में पहला कथन होना चाहिए।

---------- अद्यतन --------- अद्यतन ------------ अद्यतन ------------ --- अद्यतन ------------- अद्यतन ---------- अद्यतन --------- अद्यतन ----------- - अद्यतन --------------- अद्यतन ------------- अद्यतन --------- अद्यतन

मैं एनीमेशन सूची = रेस/drawable-hdpi/progress_animation.xml

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/selected" android:oneshot="false"> 
<item android:drawable="@drawable/frame02" android:duration="50" /> 
<item android:drawable="@drawable/frame03" android:duration="50" /> 
<item android:drawable="@drawable/frame04" android:duration="50" /> 
<item android:drawable="@drawable/frame05" android:duration="50" /> 
<item android:drawable="@drawable/frame06" android:duration="50" /> 
<item android:drawable="@drawable/frame07" android:duration="50" /> 
<item android:drawable="@drawable/frame08" android:duration="50" /> 
<item android:drawable="@drawable/frame09" android:duration="50" /> 
<item android:drawable="@drawable/frame10" android:duration="50" /> 
......................................... 
<item android:drawable="@drawable/frame57" android:duration="50" /> 
<item android:drawable="@drawable/frame58" android:duration="50" /> 
</animation-list> 

बनाया है।

मैं लेआउट फ़ाइल बनाई है छवि देखें = रेस/लेआउट/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<ImageView android:id="@+id/swing_play" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

</RelativeLayout> 

की मेजबानी के लिए।

जावा क्लास गतिविधि imageView और AnimationDrawable = com.example.apptwo/MainActivity.java

कॉल करने के लिए।

package com.exampleone.apptwo; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.drawable.AnimationDrawable; 
import android.view.Menu; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.acivity_main); 
    ImageView img = (ImageView)findViewById(R.id.swing_play); 
    img.setBackgroundResource(R.drawable.progress_animation); 

    AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground(); 

    frameAnimation.start(); 
} 

} 

आईडीई कोड में किसी भी त्रुटि को ध्वजांकित नहीं करता है। हालांकि, जब मैं एप्लिकेशन चलाता हूं तो मेरा एमुलेटर एक संदेश के साथ एक सफेद पृष्ठभूमि प्रदर्शित करता है "दुर्भाग्य से, AppTwo बंद हो गया है।"

Errorlog पढ़ता = "बिना क्रिया घटना लूप अपवाद"

Logcat ------------------------------- -------------------------------------------------- --------------------------------------------------

इस सत्र फ़िल्टर logcat

04-06 17:10:48.193: D/AndroidRuntime(989): Shutting down VM 
04-06 17:10:48.193: W/dalvikvm(989): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
04-06 17:10:48.213: E/AndroidRuntime(989): FATAL EXCEPTION: main 
04-06 17:10:48.213: E/AndroidRuntime(989): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.apptwo/com.example.apptwo.MainActivity}: java.lang.NullPointerException 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.os.Looper.loop(Looper.java:137) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.app.ActivityThread.main(ActivityThread.java:5041) 
04-06 17:10:48.213: E/AndroidRuntime(989): at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 17:10:48.213: E/AndroidRuntime(989): at java.lang.reflect.Method.invoke(Method.java:511) 
04-06 17:10:48.213: E/AndroidRuntime(989): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
04-06 17:10:48.213: E/AndroidRuntime(989): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
04-06 17:10:48.213: E/AndroidRuntime(989): at dalvik.system.NativeStart.main(Native Method) 
04-06 17:10:48.213: E/AndroidRuntime(989): Caused by: java.lang.NullPointerException 
04-06 17:10:48.213: E/AndroidRuntime(989): at com.example.apptwo.MainActivity.onCreate(MainActivity.java:14) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.app.Activity.performCreate(Activity.java:5104) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
04-06 17:10:48.213: E/AndroidRuntime(989): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
04-06 17:10:48.213: E/AndroidRuntime(989): ... 11 more 

है भी कई logCat (सभी संदेश) पोस्ट करने के लिए होते हैं, लेकिन नीचे यह एक त्रुटि के समय के आसपास महत्वपूर्ण हो रहा है।

04-06 17:10:48.213: E/AndroidRuntime(989): FATAL EXCEPTION: main 

सामग्री दृश्य के साथ लॉग इन करने के लिए अपडेट करें! ! !

: error opening trace file: No such file or directory (2) 

: GC_FOR_ALLOC freed 67K, 7% free 2500K/2688K, paused 49ms, total 54ms 

: I/dalvikvm-heap(1813): Grow heap (frag case) to 4.022MB for 1536016-byte allocation 

: D/dalvikvm(1813): GC_FOR_ALLOC freed 2K, 5% free 3998K/4192K, paused 125ms, total 125ms 

: D/dalvikvm(1813): GC_CONCURRENT freed <1K, 5% free 3998K/4192K, paused 5ms+15ms, total 105ms 

: D/dalvikvm(1813): GC_FOR_ALLOC freed <1K, 5% free 3998K/4192K, paused 36ms, total 37ms 

: Grow heap (frag case) to 5.485MB for 1536016-byte allocation 

: GC_CONCURRENT freed <1K, 4% free 5498K/5696K, paused 75ms+14ms, total 156ms 

: GC_FOR_ALLOC freed <1K, 4% free 5499K/5696K, paused 32ms, total 33ms 

: Grow heap (frag case) to 6.950MB for 1536016-byte allocation 

: GC_CONCURRENT freed <1K, 3% free 6999K/7200K, paused 74ms+17ms, total 156ms 
: D/dalvikvm(1813): GC_FOR_ALLOC freed <1K, 3% free 6999K/7200K, paused 46ms, total 47ms 
: I/dalvikvm-heap(1813): Grow heap (frag case) to 8.416MB for 1536016-byte allocation 
: GC_CONCURRENT freed <1K, 3% free 8499K/8704K, paused 79ms+4ms, total 173ms 
: GC_FOR_ALLOC freed <1K, 3% free 10001K/10208K, paused 33ms, total 34ms 
: GC_FOR_ALLOC freed <1K, 2% free 11501K/11712K, paused 35ms, total 35ms 
: GC_FOR_ALLOC freed <1K, 2% free 13002K/13216K, paused 38ms, total 38ms 
: GC_FOR_ALLOC freed <1K, 2% free 14503K/14720K, paused 35ms, total 36ms 
: GC_FOR_ALLOC freed <1K, 2% free 16003K/16224K, paused 39ms, total 40ms 
: GC_FOR_ALLOC freed <1K, 2% free 17504K/17728K, paused 41ms, total 41ms 
: GC_FOR_ALLOC freed <1K, 2% free 19004K/19232K, paused 42ms, total 43ms 
: GC_FOR_ALLOC freed <1K, 2% free 20505K/20736K, paused 58ms, total 58ms 
: GC_FOR_ALLOC freed <1K, 2% free 22006K/22240K, paused 137ms, total 138ms 
: GC_FOR_ALLOC freed <1K, 1% free 23506K/23744K, paused 47ms, total 47ms 
: GC_FOR_ALLOC freed <1K, 1% free 25007K/25248K, paused 48ms, total 48ms 
: GC_FOR_ALLOC freed <1K, 1% free 26507K/26752K, paused 50ms, total 51ms 
: GC_FOR_ALLOC freed <1K, 1% free 28008K/28256K, paused 56ms, total 57ms 
: GC_FOR_ALLOC freed <1K, 1% free 29509K/29760K, paused 58ms, total 58ms 
: Clamp target GC heap from 32.398MB to 32.000MB 
: GC_FOR_ALLOC freed <1K, 1% free 31009K/31264K, paused 57ms, total 58ms 
: Clamp target GC heap from 33.863MB to 32.000MB 
: GC_FOR_ALLOC freed <1K, 1% free 32510K/32768K, paused 56ms, total 56ms 
: Forcing collection of SoftReferences for 1536016-byte allocation 
:Clamp target GC heap from 33.855MB to 32.000MB 
: GC_BEFORE_OOM freed 9K, 1% free 32500K/32768K, paused 87ms, total 88ms 
: Out of memory on a 1536016-byte allocation. 
: "main" prio=5 tid=1 RUNNABLE 
: | group="main" sCount=0 dsCount=0 obj=0x40a729a0 self=0x2a00bba8 
: | sysTid=1813 nice=0 sched=0/0 cgrp=apps handle=1073849308 
: | state=R schedstat=(3245039730 1438341923 288) utm=275 stm=49 core=0 
: at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
: at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502) 
: at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355) 
: at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785) 
: at android.content.res.Resources.loadDrawable(Resources.java:1965) 
: at android.content.res.Resources.getDrawable(Resources.java:660) 
: at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282) 
: at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885) 
: at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822) 
: at android.content.res.Resources.loadDrawable(Resources.java:1950) 
: at android.content.res.Resources.getDrawable(Resources.java:660) 
: at android.view.View.setBackgroundResource(View.java:14468) 
: at com.example.appthree.MainActivity.onCreate(MainActivity.java:15) 
: at android.app.Activity.performCreate(Activity.java:5104) 
: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
: at android.app.ActivityThread.access$600(ActivityThread.java:141) 
: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
: at android.os.Handler.dispatchMessage(Handler.java:99) 
: at android.os.Looper.loop(Looper.java:137) 
: at android.app.ActivityThread.main(ActivityThread.java:5041) 
: at java.lang.reflect.Method.invokeNative(Native Method) 
: at java.lang.reflect.Method.invoke(Method.java:511) 
: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
: at dalvik.system.NativeStart.main(Native Method) 
: --- decoder->decode returned false 
: Shutting down VM 
: threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
: FATAL EXCEPTION: main 
: java.lang.OutOfMemoryError 
: at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
: at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502) 
: at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355) 
: at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785) 
: at android.content.res.Resources.loadDrawable(Resources.java:1965) 
: at android.content.res.Resources.getDrawable(Resources.java:660) 
: at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282) 
: at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885) 
: at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822) 
: at android.content.res.Resources.loadDrawable(Resources.java:1950) 
: at android.content.res.Resources.getDrawable(Resources.java:660) 
: at android.view.View.setBackgroundResource(View.java:14468) 
: at com.example.appthree.MainActivity.onCreate(MainActivity.java:15) 
: at android.app.Activity.performCreate(Activity.java:5104) 
: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
: at android.app.ActivityThread.access$600(ActivityThread.java:141) 
: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
: at android.os.Handler.dispatchMessage(Handler.java:99) 
: at android.os.Looper.loop(Looper.java:137) 
: at android.app.ActivityThread.main(ActivityThread.java:5041) 
: at java.lang.reflect.Method.invokeNative(Native Method) 
: at java.lang.reflect.Method.invoke(Method.java:511) 
: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
: at dalvik.system.NativeStart.main(Native Method) 
: GC_CONCURRENT freed 30038K, 93% free 2539K/32768K, paused 73ms+97ms, total 472ms 
+0

इस ट्यूटोरियल http://droid-blog.net/2011/10/14/tutorial-how-to-use-animated-gifs-in-android- कोशिश भाग -1/इसमें एनिमेटेड gif प्रदर्शित करने के लिए एक अलग तरीके हैं .. पृष्ठ के निचले भाग में ट्यूटोरियल के अन्य हिस्सों के लिए लिंक हैं .. – Elior

+0

मैं आपको एनिमेटेड gif प्रदर्शित करने के इस तरीके को देखने का सुझाव देता हूं http: // ड्रायड ब्लॉग।नेट/2011/10/17/ट्यूटोरियल-कैसे-टू-प्ले-एनिमेटेड-gifs-in-android-part-3/ – Elior

+0

एंड्रॉइड एनिमेटेड GIFs – Martin

उत्तर

21

जैसा कि मार्टिन कहते हैं, एंड्रॉइड जीआईएफ का समर्थन नहीं करता है। एक कामकाज के रूप में, एंड्रॉइड Animation List/AnimationDrawable प्रदान करता है। आपको जीआईएफ को अलग-अलग फ्रेम [.png फाइल] में परिवर्तित करने की आवश्यकता होगी। मैं रूपांतरण

Original GIF image

यह GIF अपने फ्रेम में विभाजित किया जा सकता के लिए GIMP का उपयोग करें:

GIF frames in GIMP

उन्हें बचाना frame01.png, frame02.png रूप

, और इतने पर, और एक एनीमेशन-सूची एक्सएमएल फ़ाइल बनाते हैं, कहते हैं, progress_animation.xml

<animation-list android:id="@+id/selected" android:oneshot="false"> 
<item android:drawable="@drawable/frame01" android:duration="50" /> 
<item android:drawable="@drawable/frame02" android:duration="50" /> 
<item android:drawable="@drawable/frame03" android:duration="50" /> 
.... 
<item android:drawable="@drawable/frameN" android:duration="50" /> 

एनीमेशन शुरू करने के लिए, आप एक AnimationDrawable करने के लिए छवि कास्ट करने के लिए की जरूरत है, और शुरू फोन() यह

AnimationDrawable progressAnimation = (AnimationDrawable) yourImageView.getBackground(); 
progressAnimation.start(); 
+0

का समर्थन नहीं करता है क्योंकि संसाधनों के लिए धन्यवाद क्योंकि उन्होंने मुझे बहुत मदद की है। मैंने अपने कोड का एक अद्यतन पोस्ट किया है, हालांकि मेरा एप्लिकेशन अभी भी नहीं चलेगा। –

+1

क्या आप पूरा लॉगकैट स्टैक ट्रेस पोस्ट करेंगे, या कम से कम कोड की लाइन का उल्लेख करें जो UnhandledEventLoopException का कारण बनता है? – WeNeigh

+0

मैंने सत्र फ़िल्टर लॉगकैट जोड़ा है। मैं सभी संदेश पोस्ट करूंगा (कोई फ़िल्टर नहीं) लेकिन मूल रूप से उनके पृष्ठ हैं। –

1

gif एनीमेशन एंड्रॉयड में समर्थित है जब GIF एनीमेशन फिल्म के रूप में खेला जाता है पर।

Take a look.

0

एप्लिकेशन में अपने gif छवि डाल \ src \ मुख्य \ संपत्ति

(जैसे

public class MyGifView extends View { 
Movie movie; 
InputStream is; 
long startTime; 

public MyGifView(Context context) { 
    super(context); 
    try { 
     is = getResources().getAssets().open("anim.gif"); 
     movie = Movie.decodeStream(is); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawColor(Color.WHITE); 
    super.onDraw(canvas); 
    long now = System.currentTimeMillis(); 
    if (startTime == 0) // first time 
     startTime = now; 
    int relTime = (int) ((now - startTime) % movie.duration()); 
    movie.setTime(relTime); 
    float scalefactorx = (float) this.getWidth()/(float) movie.width(); 
    float scalefactory = (float) this.getHeight()/(float) movie.height(); 
    canvas.scale(scalefactorx,1); 
    movie.draw(canvas, scalefactorx, scalefactory); 
    this.invalidate(); 
} 

}

एक वर्ग कहीं एक लेआउट जोड़ने के अपने xml activity_layout में बनाना backgroundFrameLayout)। अपनी गतिविधि में प्रयोग OnCreate():

FrameLayout frameLayout = findViewById(R.id.backgroundFrameLayout); 
frameLayout.addView(new MyGifView(this)); 
संबंधित मुद्दे