Ich habe eine Kartenflickanimation implementiert, wie beschrieben here. Alles scheint gut zu funktionieren, außer den Schatten, die sich merkwürdig während des Umdrehens verhalten (wie man sieht here). Da diese Schatten durch die Höhe verursacht werden, verschwindet dieser grafische Fehler, wenn ich die Höhe auf 0 setze. Ich würde es jedoch vorziehen, die Schatten nicht zu deaktivieren.Merkwürdiges Schattenverhalten während Kartenumdrehen
Wie kann ich diese Animation reparieren, ohne die Höhe zu deaktivieren, oder ist das unmöglich?
FlashcardFragment.java
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.cardFront = (CardView) this.getView().findViewById(R.id.flashcard_front);
this.cardBack = (CardView) this.getView().findViewById(R.id.flashcard_back);
this.getView().setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view){
flip();
}
});
float scale = this.getResources().getDisplayMetrics().density * 8000;
this.cardFront.setCameraDistance(scale);
this.cardBack.setCameraDistance(scale);
this.cardBack.setAlpha(0.0f); // hides back of card
}
public void flip() {
if (this.flipped) return;
this.flipped = true;
AnimatorSet animationOut = (AnimatorSet) AnimatorInflater.loadAnimator(this.getContext(), R.animator.flashcard_flip_out);
AnimatorSet animationIn = (AnimatorSet) AnimatorInflater.loadAnimator(this.getContext(), R.animator.flashcard_flip_in);
animationOut.setTarget(this.cardFront);
animationIn.setTarget(this.cardBack);
animationOut.start();
animationIn.start();
}
flashcard_flip_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator
android:valueFrom="-180"
android:valueTo="0"
android:propertyName="rotationY"
android:repeatMode="reverse"
android:duration="1000" />
<objectAnimator
android:valueFrom="0.0"
android:valueTo="1.0"
android:propertyName="alpha"
android:startOffset="500"
android:duration="0" />
</set>
flashcard_clip_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator
android:valueFrom="0"
android:valueTo="180"
android:propertyName="rotationY"
android:duration="1000" />
<objectAnimator
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:startOffset="500"
android:duration="0" />
</set>
fragment_flashcard.xml
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.project.FlashcardFragment" >
<include layout="@layout/flashcard"
android:id="@+id/flashcard_back" />
<include layout="@layout/flashcard"
android:id="@+id/flashcard_front" />
</FrameLayout>
flashcard.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardCornerRadius="@dimen/card_corner_radius"
card_view:cardElevation="@dimen/card_elevation_raised"
card_view:cardUseCompatPadding="true" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/padding_default" >
<TextView style="@android:style/TextAppearance.Large"
android:id="@+id/flashcard_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
</android.support.v7.widget.CardView>