web-dev-qa-db-fra.com

Fondu enchaîné avec TransitionDrawable ne fonctionnant pas sur Android

J'ai deux images que je veux effectuer un fondu enchaîné. Initialement, ils utilisent tous deux imageview. J'utilise ensuite .getDrawable () pour obtenir le dessin des images. 

C'est le code que j'ai utilisé 

Drawable backgrounds[] = new Drawable[2];
backgrounds[0] = BackgroundImage.getDrawable();
backgrounds[1] = BackgroundImageBlurred.getDrawable();

TransitionDrawable crossfader = new TransitionDrawable(backgrounds);
crossfader.startTransition(3000);

Il ne montre que l'image sur le premier élément du tableau, ce qu'il montre quand même, car les deux images étaient définies comme visibles dans le XML. 

La transition ne commence pas 

Toute aide serait appréciée :) 

24
Jack Sparrow

Voici un exempleIFvous avez 2 dessinables et souhaitez animer leur transition dans une ImageView:

package com.example.app;

import Android.app.Activity;
import Android.content.res.Resources;
import Android.graphics.drawable.Drawable;
import Android.graphics.drawable.TransitionDrawable;
import Android.os.Bundle;
import Android.widget.ImageView;

 class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Drawable backgrounds[] = new Drawable[2];
        Resources res = getResources();
        backgrounds[0] = res.getDrawable(Android.R.drawable.btn_star_big_on);
        backgrounds[1] = res.getDrawable(Android.R.drawable.btn_star_big_off);

        TransitionDrawable crossfader = new TransitionDrawable(backgrounds);

        ImageView image = (ImageView)findViewById(R.id.image);
        image.setImageDrawable(crossfader);

        crossfader.startTransition(3000);

    }
}

Ensuite, si vous souhaitez revenir à l'image d'origine, vous pouvez appeler

// Make sure the transition occurred
crossfader.startTransition(0);
// Reverse transition
crossfader.reverseTransition(3000);

S'il vous plaît corrigez-moi si j'ai mal compris votre question.

35
Simas

Vous devriez utiliser setCrossFadeEnabled propery

final TransitionDrawable briefcaseTransition = (TransitionDrawable) briefcase.getDrawable();
briefcaseTransition.setCrossFadeEnabled(true);
briefcaseTransition.startTransition(500);
11
cesards

Peut-être que vous aimez celui-ci
- res/drawable/transition.xml:

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/on" />
    <item Android:drawable="@drawable/off" />
</transition>

ImageView: 

<ImageButton Android:id="@+id/button"
    Android:layout_height="wrap_content"
    Android:layout_width="wrap_content"
    Android:src="@drawable/transition" /> 

Javacode: 

ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);

Si cela vous aide, vous pouvez voir Google-Dev:

http://developer.Android.com/guide/topics/resources/drawable-resource.html

4
azuztekztorem

Si vous utilisez des vecteurs, votre VectorDrawables ne sera pas passé en fondu dans TransitionDrawable. 

Vous devrez d’abord les convertir en BitmapDrawables.

Voir ma réponse ici https://stackoverflow.com/a/54583929/114549 pour un exemple

3
aaronvargas

Une TransitionDrawable est juste un type spécial de dessinable. Il n'est pas dessiné par lui-même, il doit être placé quelque part (par exemple sur un fond de vue, sur une vue, etc.) pour être affiché.

Si vous essayez de procéder à un crossfade de deux images, vous avez deux approches possibles:

  1. Utilisez un single ImageView avec une TransitionDrawable.
  2. Utilisez deux ImageViews et fondez-les avec des animations .
2
matiash