そのため、すべて同じ回転仕様を使用して、いくつかのビューをすべて同時に回転させたいと思います。問題は、何らかの理由で、回転が2番目の要素に対して異なる動作をすることです。どうやらこれは、アニメーションオブジェクトがこれらの2行のコード間で実際に状態を変更することに関係しているようです。もちろん、別のアニメーションオブジェクトを作成して適用することもできますが、もっと簡単な方法があるように感じます(約15のビューがあります)
最初のビューのみを正しく回転します。
Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
target.startAnimation(rotateAnim);
lightBtn.startAnimation(rotateAnim);
両方を正しく回転させます
Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
Animation rotateAnim2 = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
target.startAnimation(rotateAnim);
lightBtn.startAnimation(rotateAnim2);
XML:
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fromDegrees="-90"
Android:toDegrees="0"
Android:pivotX="50%"
Android:pivotY="50%"
Android:duration="500" Android:fillAfter="true">
誰かアイデアはありますか?
だから、これは不可能だと思うので、同じアニメーションをビューのリストに適用するヘルパーメソッドを作成しました。
public void doRotations(ArrayList<View> views, int start, int end, int xprop, float xscale, int yprop, float yscale, int duration, Boolean fillAfter){
for(int i = 0; i < views.size(); i++){
RotateAnimation temp = new RotateAnimation(start, end, xprop, xscale, yprop, yscale);
temp.setDuration(duration);
temp.setFillAfter(fillAfter);
views.get(i).startAnimation(temp);
}
}
間違いなくハックですが、私が今できることはそれだけだと思います
このようにしてください:
ObjectAnimator anim = ObjectAnimator.ofFloat(view, "y", 100f);
arrayListObjectAnimators.add(anim);
ObjectAnimator anim1 = ObjectAnimator.ofFloat(view, "x", 0f);
arrayListObjectAnimators.add(anim1);
ObjectAnimator[] objectAnimators = arrayListObjectAnimators.toArray(new ObjectAnimator[arrayListObjectAnimators.size()]);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(objectAnimators);
animSetXY.duration(1000);
animSetXY.start();