如何使用动画旋转ImageButton源图像。

时间:2015-07-06 09:05:48

标签: android android-xml image-rotation

我需要旋转ImageButton的可绘制资源。我已成功将功能旋转到Button,但旋转功能会影响整个按钮。我想做的只是在ImageButton中只旋转drawable。

enter image description here

如何处理这种情况? PS:我在ImageButton中访问了drawable,但是我无法提供任何动画功能。

感谢帮助

这是我的ImageButton xml;

 <ImageButton
   android:id="@+id/button"
   android:layout_width="50dp"
   android:layout_height="50dp"
   android:layout_gravity="center_vertical"
   android:layout_marginTop="-40dp"
   android:background="@color/titlebackground_color"
   android:src="@drawable/open" />

先旋转xml;

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator">
    <rotate
        android:fromDegrees="-180"
        android:toDegrees="-360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="500"
        android:startOffset="0"
        />
</set>

旋转第二个xml;

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator">
    <rotate
        android:fromDegrees="-180"
        android:toDegrees="-0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="500"
        android:startOffset="0"

        />
</set>

动画功能;

public class LayerInfoFragment extends Fragment {
 int count = 0;
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.layer_info_main, container, false);
        btnClose = (ImageButton) v.findViewById(R.id.button);
        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Animation rotate = AnimationUtils.loadAnimation(getActivity(), R.anim.rotate_first);
                Animation rotatex = AnimationUtils.loadAnimation(getActivity(), R.anim.rotate_last);

                if (count % 2 == 0) {
                    v.setRotation(180);
                    v.setAnimation(rotate);


                } else {
                     v.setRotation(0);
                     v.setAnimation(rotatex);
                }
                count++;


            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

我认为有两件事要尝试。

1)在v.startAnimation(rotate);之后添加代码v.setAnimation()。我怀疑你的动画永远不会开始。我之前想到的是android:设置中的startOffset会触发一个开始但我不清楚。

2)尝试 RotateAnimation ,动画的直接子类,而不是动画对象。似乎很多人使用RotateAnimation比其他任何东西都要多。除此之外,我怀疑的另一个问题是在布局文件中。 例如:

RotateAnimation rotate = (RotateAnimation) AnimationUtils.loadAnimation...

告诉我们会发生什么。