저는 실제로 로더 인 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으로 GIF 시간을 설정할 수 있습니다 호출보기를 다시 그릴 수 있습니다. –
init 호출이 작동하지 않습니다. –
try setEnabled (false); 당신이 그것을 숨길 때. – David