Auf der einen Seite habe ich ein Layout mit zwei Image:animierte Übergang zwischen zwei Imageview
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/image_cross2"
android:layout_width="wrap_content"
android:layout_height="@dimen/image_size"
android:layout_gravity="top"
android:scaleType="centerCrop" />
<ImageView
android:id="@+id/image_cross1"
android:layout_width="wrap_content"
android:layout_height="@dimen/image_size"
android:layout_gravity="top"
android:scaleType="centerCrop" />
</FrameLayout>
Auf der anderen Seite habe ich eine Liste von Bild ressources:
static int mImages[] = new int[] {
R.drawable.artistes,
R.drawable.couple1,
R.drawable.couple2,
R.drawable.couple3,
R.drawable.enfant,
R.drawable.manege,
R.drawable.manege2,
R.drawable.metropolitain,
R.drawable.panoramique,
R.drawable.sacrecoeur };
i habe auch einen Scheduler aus Handler + postDelayed() um die Bilder nacheinander mit einem Timer anzuzeigen. Dies funktioniert gut
mein Problem geht es um die Übergangsanimation von einem Imageview zum anderen, wohl wissend, dass i die imageviews jedes Mal reinigen müssen, um zu OutOfMemoryExceptions zu vermeiden:
Vorerst ich das tun in der schduled Callback-Methode:
if (mIndex == mImages.length) {
mIndex = 0; // repeat
}
if (mIndex % 2 != 0) { // pair
mImageCross2.setImageResource(mImages[mIndex++]);
Utils.crossfade(mImageCross2, mImageCross1, 1000/*duration*/);
mImageCross1.setImageResource(0);
} else {
mImageCross1.setImageResource(mImages[mIndex++]);
Utils.crossfade(mImageCross1, mImageCross2, 1000);
mImageCross2.setImageResource(0);
}
mit dieser Animation:
public static void crossfade(final ImageView viewIn, final ImageView viewOut, int duration) {
Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setDuration(duration);
Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setDuration(duration);
fadeOut.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
viewOut.setVisibility(View.GONE);
}
});
fadeIn.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
viewIn.setVisibility(View.VISIBLE);
}
});
viewOut.startAnimation(fadeOut);
viewIn.startAnimation(fadeIn);
}
Die Animation ist nicht großartig, die verblassen ist nicht wirklich glatt, was kann ich tun, um es reibungsloser zu machen, während die ImageView jedes Mal reinigen?
oh super schön, ich werde versuchen, dass danke –
oh, übrigens ... Ich tippte alle th auswendig, es könnte ein paar Tippfehler geben, sobald Sie es in der IDE tippen, sehen Sie – Budius
Ich bekomme eine Nullpointer-Ausnahme bei "getResources(). getDrawables (mImages [0])" sogar mit den Ressourcen Nummern direkt getResources(). getDrawables (R.drawable.artistes), haben Sie eine Idee? –