2016-05-25 17 views
0

Ich verwende Aktivitäten Übergänge in Android mit dem nächsten:Aktivität Transitions + Image (Android)

ActivityOptionsCompat options = ActivityOptionsCompat 
    .makeSceneTransitionAnimation(activity, view, "image"); 

activity.startActivity(intent, options.toBundle()); 

Und ich teilen sich zwei Image:

In Aktivität A:

<android.support.v7.widget.AppCompatImageView android:id="@+id/iv_image" 
    android:transitionName="image" 
    android:layout_width="match_parent" 
    android:scaleType="centerCrop" 
    android:layout_height="150dp"/> 

In Aktivität B:

<android.support.v7.widget.AppCompatImageView android:id="@+id/fullscreen_content" 
    android:transitionName="image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center"/> 

Das Problem ist, dass, wenn ich meine Aktivität B beginnen, ich habe das Image mit einem Bitmap füllen:

String name = getIntent().getStringExtra(IMAGE_NAME_EXTRA); 
ImageStorageManagement imageStorageManagement = new ImageStorageManagement(this); 
Bitmap image = imageStorageManagement.decodeImage(name, 640, 480); 

mContentView.setImageBitmap(image); 

Mein'decodeImage' Methode sieht wie folgt aus:

public Bitmap decodeImage(String name, int reqWidth, int reqHeight) { 
    File f = new File(getImagesDirectory(), name); 
    String path = f.getAbsolutePath(); 

    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, options); 

    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

    options.inJustDecodeBounds = false; 
    return BitmapFactory.decodeFile(path, options); 
    } 

Und natürlich ist es, Friert die App um eine Sekunde ein und unterbricht die flüssige Bewegung. Ich habe versucht, Picasso zu verwenden, aber da die Bitmap asynchron geladen wird, wird der Übergang nicht abgespielt, da noch kein Bildsatz vorhanden ist.

Mit all diesen, wie soll ich die Bilder aus dem internen Speicher lesen? Ich bin ziemlich neu in all diesen Animations-Sachen und habe keine Ahnung, ob ich es richtig mache.

+ info: Ich muß sagen, die Bilder haben ihre Originalgröße (Big), ich mit dem Decodierungsverfahren versucht, sie kleiner zu machen, aber ich bin nicht sicher, es ist eine ziemlich gute Idee.

Antwort

1

Sie könnten wahrscheinlich am besten einen URI verwenden und diesen dann zwischen Aktivitäten anstelle der Bitmap selbst übergeben.

Vor allem, wenn Sie über ein Bündel gehen, stoßen Sie auf das Limit von 1 MB.

Ich habe das gleiche mit Picasso und Glide getan, indem ich nur URI-Referenzen übergeben.