私は、ある断片から別の断片にスライドしながら3Dキューブの回転効果を作りようとしています。 最初にFragmentTransaction.setCustomAnimations(...)
でコールする翻訳エフェクト(XML上)を使用していましたが、フラグメントを開いたり閉じたりするときに、カメラクラスを使用して回転を行っていました。Android - 同じXMLファイルで翻訳とobjectAnimatorを作成する
これはFINEで動作していましたが、XMLファイルのみを使用して、このアニメーションのすべてを使用する理由がわかりません。長い検索の後、私は回転をするためにobjectAnimatorを使うべきであることを知りました。
Googleサンプルに続いて、私はフリップアニメーションを作ります。今私はそれらをスライディングインとスライディングアウトする断片を翻訳する必要があります。私はobjectAnimatorを使用して、同じXMLファイルにエフェクトを変換することはできないようです。このエラーは次のように表示されるので、
java.lang.RuntimeException: Unknown animator name: translate at (...)
どのように私はスライドエフェクトを作成し、同時にobjectAnimatorを使用することができますか?
ありがとうございました!
iが使用されてきたコード:
card_flip_right_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Before rotating, immediately set the alpha to 0. -->
<objectAnimator
android:duration="0"
android:propertyName="alpha"
android:valueFrom="1.0"
android:valueTo="0.0" />
<!-- Rotate. -->
<objectAnimator
android:duration="@integer/card_flip_time_full"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:propertyName="rotationY"
android:valueFrom="180"
android:valueTo="0" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<objectAnimator
android:duration="1"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:valueFrom="0.0"
android:valueTo="1.0" />
</set>
フラグメントの別の断片を呼び出す:(キューブの回転は、この2と表示されなければならない)
private void launchArticle(int prev, int pos){
ArticleFragment newFragment = new ArticleFragment();
Bundle args = new Bundle();
args.putString("pos", pos);
args.putInt("prev", prev);
newFragment.setArguments(args);
android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();
Fragment currFrag = (Fragment)getFragmentManager().findFragmentById(R.id.headlines_fragment);
if (currFrag != null) {
transaction.hide(currFrag);
}
transaction.setCustomAnimations(
R.animator.card_flip_right_in,
R.animator.card_flip_right_out,
R.animator.card_flip_left_in,
R.animator.card_flip_left_out
);
transaction.replace(R.id.fragment_container, newFragment, pos);
transaction.addToBackStack(null);
transaction.commit();
}
更新日:
私はSlidingFrameLayout.java
public class SlidingFrameLayout extends FrameLayout
{
private static final String TAG = SlidingFrameLayout.class.getName();
public SlidingFrameLayout(Context context) {
super(context);
}
public SlidingFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public float getXFraction()
{
final int width = getWidth();
if(width != 0) return getX()/getWidth();
else return getX();
}
public void setXFraction(float xFraction) {
final int width = getWidth();
setX((width > 0) ? (xFraction * width) : -9999);
}
public float getYFraction()
{
final int height = getHeight();
if(height != 0) return getY()/getHeight(); else return getY();
}
public void setYFraction(float yFraction) {
final int height = getHeight();
setY((height > 0) ? (yFraction * height) : -9999);
}
}
とobjectAnimatorにこれを追加することによってを使用していた断片の私でframeLayoutを拡張するクラスを使用して、前の問題を解決するために管理してきました
:これは良く働いているが、rottation軸はでframeLayoutの真ん中にあり、それがmakiない
<!-- Move -->
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/card_flip_time_full"
android:interpolator="@android:anim/linear_interpolator"
android:propertyName="xFraction"
android:valueFrom="-1"
android:valueTo="0" />
立方体の錯視...回転軸をある点で設定することは可能ですか?
私の場合は、FrameLayoutの代わりにフラグメントのルートビューで余分なメソッド(getXFraction、setXFraction ...)を持っていなければなりませんでしたが、結果は同じです..ありがとう – codeskraps
@codeskrapsは、フラグメントのルートビューに余分なメソッドを追加しましたか?私はフラグメントをスライドしたいと私はそうするために拡張FrameLayoutを使用しています。それは動作しますが、いくつかの問題があります。私はこれを行うより良い方法を探しています。 – crubio