현재 영화를 사용하여 사용자 정의보기에서 gif 이미지를 표시하려고합니다. 말 그대로이 작업을 수행하는 가장 일반적인 방법을 사용했습니다 :이 내 휴대 전화 (넥서스 4가 실행 API 18)에 GIF의 첫 번째 프레임을 표시왜 내 GIF 이미지에 애니메이션이 적용되지 않습니까?
public class GifView extends View {
private Movie movie;
private long timeElapsed;
public GifView(Context context) {
super(context);
init();
}
public GifView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public GifView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
timeElapsed = 0;
setImage(getResources().openRawResource(R.drawable.sample));
}
public void setImage(byte[] bytes) {
movie = Movie.decodeByteArray(bytes, 0, bytes.length);
invalidate();
}
public void setImage(InputStream is) {
movie = Movie.decodeStream(is);
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
super.onDraw(canvas);
long now = android.os.SystemClock.uptimeMillis();
if (timeElapsed == 0) { // first time
timeElapsed = now;
}
if (movie != null) {
int dur = movie.duration();
if (dur == 0) {
dur = 1000;
}
int relTime = (int)((now - timeElapsed) % dur);
movie.setTime(relTime);
movie.draw(canvas, getWidth() - movie.width(), getHeight() - movie.height());
invalidate();
}
}
}
. 이보기의 hardwareAcceleration을 비활성화하면 표시되도록 설정해야합니다 (관련된 선을 제거해도 아무 것도 표시되지 않음). 다른 GIF 이미지를 사용해 보았는데 같은 결과가 나왔습니다. 내가 알아 차 렸던 한 가지는 movie.getDuration()
이 항상 0을 반환한다는 것입니다. 이상하게 들릴까요? 아이디어가 있으십니까?
당신의 GIF는 자원이기 때문에, 당신은'AnimationDrawable' 및 프레임의 시리즈로 GIF 변환 내'gif2animdraw' 스크립트를 사용하는 것이 좋습니다 : https://gist.github.com/commonsguy/6757059 – CommonsWare
흥미 롭지 만이 드로어 블을 테스트 용으로 만 사용하고 있습니다. 결국 웹 요청에서 검색된 GIF를 보여줄 수 있기를 원합니다. –
아, 그래, 내 시나리오는 그 시나리오를 도와 줄 수 없습니다. 죄송합니다. – CommonsWare