2016-07-12 24 views
2

私はDraweeHolderを持つカスタムビューを実装しました。私は私のカスタムビュー(attach/detach/invalidateDrawable/setListener)のすべてのコールバックとリスナーを実装しました。カスタムビューとアニメーションGIF-gifが正しく再生されない

コントローラにGIF画像URLを設定すると、gifが正しく再生されません。ビューが再描画されたときにのみgifをリフレッシュします。アニメーションGIFに無効化コールバックなどがあるはずです。

P.S. GifはDraweeViewを使用すると正しく動作します。また、他のすべての画像が私のカスタムビュー内で正しく機能します。

ホルダーを作成:

コントローラの設定
private DraweeHolder<GenericDraweeHierarchy> createComponentHolder(View parent, Context context) { 
    GenericDraweeHierarchy componentHierarchy = new GenericDraweeHierarchyBuilder(parent.getResources()) 
      .setRoundingParams(RoundingParams.fromCornersRadius(LayoutHelper.dp(3)).setBorder(Theme.COLOR_MEDIA_BORDER, 1)) 
      .build(); 
    DraweeHolder<GenericDraweeHierarchy> holder = DraweeHolder.create(componentHierarchy, context); 
    holder.getTopLevelDrawable().setCallback(parent); 
    return holder; 
} 

PipelineDraweeControllerBuilder controllerBuilder = Fresco.newDraweeControllerBuilder() 
      .setImageRequest(MediaHelper.getImageRequest(filePath)) 
      .setAutoPlayAnimations(true) 
      .setControllerListener(controllerListener) 
      .setOldController(draweeHolder.getController()); 

    if (thumbUrl != null) { 
     controllerBuilder.setLowResImageRequest(getThumbnailRequest(thumbUrl)); 
    } 

    draweeHolder.setController(controllerBuilder.build()); 

画像要求:

public static ImageRequest getImageRequest(String filePath) { 
    int imageSize = LayoutHelper.dp(100); 
    return ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(new File(filePath))) 
      .setResizeOptions(new ResizeOptions(imageSize, imageSize)) 
      .setAutoRotateEnabled(true) 
      .build(); 
} 
+0

ドロアブルコールバックを設定しましたか? 'mDraweeHolder.getTopLevelDrawable()。setCallback(yourView);' –

+0

のようなコードの最初のブロックに表示されるように設定されています。 –

答えて

1

のGIFのためのカスタム無効化コールバックはありませんが、アニメーションの描画可能なだけでinvalidates itselfそれぞれについてのフレームであるため、コールバックを設定した場合、無効化は機能します。

Drawableコールバック(ケースparent)が正しい領域(またはすべて)を無効にしない場合、アニメーション化された描画可能無効化は正しくリフレッシュされません。 これが起こる可能性があるのは、コールバックがDrawableの正確な位置を知らず、間違った領域を無効にする場合です。 カスタムビューのDrawable.Callbackのデバッグを試すか、またはGIF描画可能オブジェクトを含むビュー全体を無効にするカスタムDrawable.Callbackクラスを作成できます。

また、Custom View documentationに記載されているように、verifyDrawableを上書きし、カスタムビューのその他のすべての手順に従ってください。

+0

アニメーション化されたドロウアブルにコールバックを追加する方法の例を表示できますか? –

+0

http://frescolib.org/docs/animations.htmlを見てください。これは、手動でアニメーションを開始および停止する方法を示しています。 –

+0

あなたはリンクしてくれませんでした。アニメーションフレスコ画(Fresco drawee内のGIF)が再生中にカスタムの親ビューを無効にする可能性がある、より多くの手がかりや例を提供できますか? –

関連する問題