2016-07-18 2 views
0

저는 실제로 로더 인 GIF를 재생하는 사용자 정의보기가 있습니다. 배경 작업을 수행 할 때마다 GIF보기 가시성을 ON으로 설정하고 작업이 완료되면 표시 여부를 설정합니다. 다음은 내 사용자 정의 GifLoader Java 코드입니다.Android에서보기를 다시 그리는 방법

public class GifLoader extends View { 

    private InputStream gifInputStream; 
    private Movie gifMovie; 
    private int movieWidth, movieHeight; 
    private long movieDuration; 
    private long mMovieStart; 

    public GifLoader(Context context) { 
     super(context); 
     init(context); 
    } 

    public GifLoader(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context); 
    } 

    public GifLoader(Context context, AttributeSet attrs, 
         int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(context); 
    } 

    private void init(Context context){ 
     setFocusable(true); 
     gifInputStream = context.getResources() 
       .openRawResource(R.drawable.loading); 

     gifMovie = Movie.decodeStream(gifInputStream); 
     movieWidth = gifMovie.width(); 
     movieHeight = gifMovie.height(); 
     movieDuration = gifMovie.duration(); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, 
          int heightMeasureSpec) { 
     setMeasuredDimension(movieWidth, movieHeight); 
    } 

    public int getMovieWidth(){ 
     return movieWidth; 
    } 

    public int getMovieHeight(){ 
     return movieHeight; 
    } 

    public long getMovieDuration(){ 
     return movieDuration; 
    } 


    @Override 
    protected void onDraw(Canvas canvas) { 

     long now = android.os.SystemClock.uptimeMillis(); 
     if (mMovieStart == 0) { // first time 
      mMovieStart = now; 
     } 

     if (gifMovie != null) { 

      int dur = gifMovie.duration(); 
      if (dur == 0) { 
       dur = 100; 
      } 

      int relTime = (int)((now - mMovieStart) % dur); 

      gifMovie.setTime(relTime); 

      gifMovie.draw(canvas, 0, 0); 
      invalidate(); 

     } 

    } 

} 

이것은 내 XML 코드입니다. 내가 진행 이미 실행중인 볼에 가시성을 설정할 때마다 가시성이없는 초기 상태에서, 사라 동안

<yas.life.utils.GifLoader 
    android:visibility="gone" 
    android:layout_centerInParent="true" 
    android:id="@+id/loading" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

이제 문제는 GIFview가 실행됩니다. GIF 로더는 초기 상태에서 시작해야합니다. 가시성을 설정하거나이 작업을 수행하는 다른 방법으로 설정할 때마다이 사용자 정의 GIFview를 다시 시작하십시오.

+0

전화 초기화를 사라 다시 볼 수 설정된 경우 0으로 GIF 시간을 설정할 수 있습니다 호출보기를 다시 그릴 수 있습니다. –

+0

init 호출이 작동하지 않습니다. –

+0

try setEnabled (false); 당신이 그것을 숨길 때. – David

답변

0

당신은 onDraw()에서 뷰 가시성 상태를 확인하고 뷰가 이전

관련 문제