2013-04-30 2 views
3

자산에서 또는 드로어 블 객체를 사용하여 안드로이드에서 애니메이션 GIF를 재생하는 방법에 대한 자습서를 찾았습니다. 하지만 내가 원하는 것은 sdcard에서 gif 파일을 읽는 것입니다. gif를 읽는 프로젝트가 조금 변경되었습니다.안드로이드 - 파일에서 애니메이션 GIF 재생

주요 활동, 나는 기본적으로 gifMovieView 다음의 setContent (gifMovieView)을 GifMovieView 클래스의 생성자에서 , 내가 프로젝트 "eu.andlabs.tutorial.animatedgifs"처럼 영화 객체를 초기화 한 만듭니다. 하지만 decodeStream 대신에 파일 경로를 지정하는 decodeFile을 사용했습니다.

File file = new File (Environment.getExternalStorageDirectory().getAbsolutePath(),"piggy.gif"); 

    if(file.exists()){ 

      mMovie = Movie.decodeFile(file.getPath()); 
    } 

이 줄에 I/O 예외가 있습니다. 그것은 파일을 발견하지만 decodeFile은 예외를 제공합니다.

onDraw에서;

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawColor(Color.TRANSPARENT); 
    super.onDraw(canvas); 
    final long now = SystemClock.uptimeMillis(); 

    if (mMoviestart == 0) { 
     mMoviestart = now; 
    } 


    Log.i("",""+mMovie.duration()); 

    Log.i("",""+mMoviestart); 

    final int relTime = (int)((now - mMoviestart) % mMovie.duration()); 
    mMovie.setTime(relTime); 
    mMovie.draw(canvas, 10, 10); 
    this.invalidate(); 
} 

예외로 인해 movie.duration이 0이됩니다.

제안 사항?

사전에

https://gist.github.com/beyzakokcan/5488897/raw/e9c2afbf941d06ed0f1d3b75dc3d100ff9d7ee85/GifMovieView.java

+0

포스트 당신의 로그 캣을. – 323go

답변

5

를 사용하여 애니메이션 감사 :

1 - Link에 GIF의 압축을 풀고

2 당김 폴더에 이미지를 저장 - 당김 폴더에 image_background_animation.xml 만들기 여기서 "img_weel"은 gif에서 추출한 이미지입니다.

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false" > 

    <item 
     android:drawable="@drawable/img_weel_1" 
     android:duration="100"/> 
    <item 
     android:drawable="@drawable/img_weel_2" 
     android:duration="100"/> 
    <item 
     android:drawable="@drawable/img_weel_3" 
     android:duration="100"/> 

</animation-list> 

3 16,- 자바 코드에서 :

ImageView imgWheel = (ImageView) findViewById(R.id.img_wheel); 
imgWheel.setBackgroundResource(R.drawable.image_background_animation); 

AnimationDrawable frameAnimation = (AnimationDrawable) imgWheel.getBackground(); 
frameAnimation.start(); 

4 - 당신은 애니메이션의 확정 시간을 원하는 경우 :

new CountDownTimer(3000, 100) { 
void onFinish() { 
    frameAnimation.stop(); 
    } 
}.start(); 

here

+0

고맙습니다. 나는 또한 안드로이드 개발자 구글 그룹에 대한 또 다른 대답을 발견했다. – Beyza

+4

다른 답변도 게시 해보세요. 그냥 링크. 그것은 다른 사람들에게 도움이 될 것입니다. – Tony

+0

@Beyza 어떻게이 문제를 해결할 수 있습니까? – Hamza

관련 문제