Android 에서 GIF 움 직 이 는 그림 의 재생 제어 와 감청 에 대한 자세 한 설명

머리말
최근 에 인수 한 프로젝트 에는 GIF 움 직 이 는 그림 의 재생 과 감청 이 포함 되 어 있 습 니 다.지난 버 전에 서 GIF 에 대한 처 리 는 H5 로 이 루어 졌 습 니 다.사용자 체험 을 고려 하여 현재 의 수 요 는 이 아 이 를 생화학 시 키 는 것 입 니 다.도중에 잘못된 길 로 들 어 갈 뻔 했 습 니 다!다음은 상세 한 소 개 를 살 펴 보 겠 습 니 다.
Android 에서 GIF 동 영상 처리 및 감청
처음에 가장 먼저 생각 한 것 은 glide 였 지만 glide 가 GIF 를 제어 하고 감청 할 수 없다 고 생각 하여 인터넷 에서 다른 방법 을 찾 았 다.그림 을 프레임 으로 나 누고 한 장 한 장 씩 프레임 애니메이션 으로 실현 하 는 방안 을 보 았 다.
나 는 이 해결 방안 을 준 사람 을 의심 하기 시작 했다.어느 시대 에 이런 힘 들 고 좋 은 소 리 를 듣 지 못 하 며 사용자 의 메모 리 를 대량으로 차지 하 는 것 을 했 는 지!그래서 손 을 쓰기 전에 다시 한 번 자세히 구 글 을 했 습 니 다.답 은 정말 저 를 난처 하 게 만 들 었 습 니 다.glide 는 GIF 애니메이션 을 제어 할 수 있 습 니 다!!
노 코드:glide 로 GIF 동 도 를 불 러 옵 니 다.

Glide.with(DoorActivity.this).load(R.drawable.opendoor).into(openDoorGif);
아주 간단 한 코드 한 줄 로 해결 할 수 있 습 니 다.상기 방식 의 그림 과 동 도 는 모두 불 러 올 수 있 습 니 다(네트워크 링크 도 가능 합 니 다)
다음은 GIF 움 직 이 는 그림 만 불 러 올 수 있 는 쓰기 입 니 다.

Glide.with(DoorActivity.this).load(R.drawable.opendoor).asGif().into(openDoorGif);
사실 asGIF 가 하나 더 생 겼 어 요.
하지만 이런 식 으로 움 직 이 는 그림 재생 은 계속 순환 되 고 있 습 니 다.어떤 방식 으로 멈 출 수 있 습 니까?만난 적 이 없 으 면 필요 하지 않 습 니 다.만약 에 지금 필요 한 것 이 있다 면 단 추 를 누 르 면 GIF 를 재생 하여 사용자 와 의 상호작용 을 실현 해 야 합 니까?이 기술 은 당신 이 반드시 get 을 해 야 한다 고 생각 합 니 다.비슷 한 수요 때문에 당신 은 조만간 만 날 수 있 을 것 입 니 다!
아래 표기 법 은 GIF 움 직 이 는 그림 에 대한 통 제 를 실현 하 였 다.

//handler          
private static final int MESSAGE_SUCCESS = 4424;
//handler          (    )
private int duration;

/**
 *     Gif  (     )
 * @param view
 */
public void loadGif(View view){  
 Glide.with(this)
   .load(R.drawable.opendoor)
   .diskCacheStrategy(DiskCacheStrategy.SOURCE)
   .listener(new RequestListener<Integer, GlideDrawable>() {

    @Override
    public boolean onException(Exception arg0, Integer arg1,
     Target<GlideDrawable> arg2, boolean arg3) {
      return false;
     }

    @Override
    public boolean onResourceReady(GlideDrawable resource,
     Integer model, Target<GlideDrawable> target,
     boolean isFromMemoryCache, boolean isFirstResource) {
     //       
     GifDrawable drawable = (GifDrawable) resource;
     GifDecoder decoder = drawable.getDecoder();
     for (int i = 0; i < drawable.getFrameCount(); i++) {
      duration += decoder.getDelay(i);
     }
     //      ,      
     //         int  ,       
     handler.sendEmptyMessageDelayed(MESSAGE_SUCCESS,
       duration);
      return false;
     }
    }) 
     //      gif  
     //      1         
    .into(new GlideDrawableImageViewTarget(openDoorGif, 1)); 
}
이런 방식 을 사용 하면 GIF 에 대한 통 제 를 완벽 하 게 실현 하고 제 가 만난 수요 에 좋 은 지 지 를 제공 할 수 있 습 니 다!
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 논문 의 내용 이 안 드 로 이 드 개발 자 들 에 게 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 십시오.저희 에 대한 지원 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기