记得QQ中有一个按钮,点击之后它就向左旋转30度,再点击就变回原来的样子,感觉特别有意思,今天我才知道它的实现原理,原来它用了一个类来实现的,只要简单的设置一下角度就可以实现了。
public class RoatAnimUtil {
//旋出的动画,无延迟时间
public static void startAnimationOut(View view) {
startAnimationOut(view, 0);
}
//旋入的动画,无延迟时间
public static void startAnimationIn(View view) {
startAnimationIn(view, 0);
}
//旋出的动画
//delay为动画延迟的时间,单位是毫秒
public static void startAnimationOut(View view, long delay) {
RotateAnimation animation = new RotateAnimation(240, 180,
view.getWidth() / 2, view.getHeight()/2);
animation.setDuration(500);
animation.setStartOffset(delay);
animation.setFillAfter(true);
view.startAnimation(animation);
}
//旋入的动画
//delay为动画延迟的时间,单位是毫秒
public static void startAnimationIn(View view, long delay) {
RotateAnimation animation = new RotateAnimation(180, 240,
view.getWidth() / 2, view.getHeight()/2);
animation.setDuration(500);
animation.setStartOffset(delay);
animation.setFillAfter(true);
view.startAnimation(animation);
}
}
在这个类中,RoateAnimation是Android提供的类,用来做旋转动画,我们把需要旋转的View传进去就可以了,delay我传入的是0。view.getWidth(),view.getHeight()/2,这两个参数表示,我们进行是中心旋转,因为我们根据这两个参数得到的就是控件的中心位置,所以是中心旋转。
下面是的MainActivity.java的代码:
public class MainActivity extends Activity implements OnClickListener{
ImageButton btn;
int x = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (ImageButton) findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(x==0){
RoatAnimUtil.startAnimationIn(btn);
Toast.makeText(MainActivity.this, "打开", Toast.LENGTH_SHORT).show();
x=1;
}else{
x=0;
RoatAnimUtil.startAnimationOut(btn);
Toast.makeText(MainActivity.this, "关闭", Toast.LENGTH_SHORT).show();
}
}
}