Android set Custom Animations

核能气质少年 提交于 2019-12-11 10:26:28

问题


I've been trying to follow the android flip card tutorial. As instructed, I created four custom animator sets

card_flip_right_in.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
    android:valueFrom="1.0"
    android:valueTo="0.0"
    android:propertyName="alpha"
    android:duration="0" />

<objectAnimator
    android:valueFrom="180"
    android:valueTo="0"
    android:propertyName="rotationY"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:duration="300" />

<objectAnimator
    android:valueFrom="0.0"
    android:valueTo="1.0"
    android:propertyName="alpha"
    android:startOffset="150"
    android:duration="1" />
</set>

card_flip_right_out.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
    android:valueFrom="0"
    android:valueTo="-180"
    android:propertyName="rotationY"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:duration="300" />

<objectAnimator
    android:valueFrom="1.0"
    android:valueTo="0.0"
    android:propertyName="alpha"
    android:startOffset="150"
    android:duration="1" />
</set>

card_flip_left_in.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">

<objectAnimator
    android:valueFrom="1.0"
    android:valueTo="0.0"
    android:propertyName="alpha"
    android:duration="0" />

<objectAnimator
    android:valueFrom="-180"
    android:valueTo="0"
    android:propertyName="rotationY"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:duration="300" />

<objectAnimator
    android:valueFrom="0.0"
    android:valueTo="1.0"
    android:propertyName="alpha"
    android:startOffset="150"
    android:duration="1" />
</set>

card_flip_left_out.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
    android:valueFrom="0"
    android:valueTo="180"
    android:propertyName="rotationY"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:duration="300" />

<objectAnimator
    android:valueFrom="1.0"
    android:valueTo="0.0"
    android:propertyName="alpha"
    android:startOffset="150"
    android:duration="1" />
</set>

And, I have this in my fragment:

public class ContestantInfoFragment extends Fragment {

private Context context;

private String cName, cCountry, cDesc;

private TextView contestant_name, contestant_country, contestant_desc;
private ImageButton flip_btn;

public ContestantInfoFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_contestant_info, container, false);

    context = inflater.getContext();

    Bundle bundle = this.getArguments();
    if(bundle != null) {
        cName = bundle.getString("NAME", "Problem loading contestant's name");
        cCountry = bundle.getString("COUNTRY", "Problem loading contestant's country");
        cDesc = bundle.getString("DESC", "Problem loading contestant's description");

        contestant_name = (TextView) v.findViewById(R.id.contestant_name);
        contestant_country = (TextView) v.findViewById(R.id.contestant_country);
        contestant_desc = (TextView) v.findViewById(R.id.contestant_desc);

        contestant_name.setText(cName);
        contestant_country.setText(cCountry);
        contestant_desc.setText(cDesc);
    }

    flip_btn = (ImageButton) v.findViewById(R.id.contestant_flip_btn);
    flip_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getActivity().getSupportFragmentManager()
                    .beginTransaction()
                    .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)
                    .replace(R.id.mainContent, new ContestantsFragment())
                                    .addToBackStack(null)
                                    .commit();
        }
    });

    return v;
}

}

However, I got syntax errors (red zip lines) for using

.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)

The feedback I got was "Expected resource of type anim" Anyone has any idea why this is not working?


回答1:


root cause:

Google's example uses getFragmentManager() and we sensible programmers are trying to use getSupportFragmentManager().

Unfortunately, getSupportFragmentManager().setCustomAnimations() signature is different. Additionally, objectAnimator is incompatible with getSupportFragmentManager().setCustomAnimations()

In short, Google created a useless card-flip demo. If you search around, you'll see that a lot of people have encountered the same problem.


solution: use of "Android Support Library v4 with NineOldAndroids" library https://stackoverflow.com/a/18511350/550471

of course it makes sense that Google's support library needs support with exposing functionality. LOL



来源:https://stackoverflow.com/questions/34404504/android-set-custom-animations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!