java.lang.Object | |||
↳ | android.graphics.drawable.Drawable | ||
↳ | android.graphics.drawable.DrawableWrapper | ||
↳ | android.graphics.drawable.RotateDrawable |
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/image"
android:visible="true"
android:fromDegrees="-90"
android:toDegrees="180"
android:pivotX="50%"
android:pivotY="50%">
</rotate>
那么图片将从-90到180进行旋转。level值为10000,也就是说level每加1000,即顺时针旋转270/10000*1000=27度。
可以根据显示看出来效果。
private ImageView imageView;
private MyHandler handler;
private Timer timer;
private static class MyHandler extends Handler {
WeakReference<ImageView> refImge;
WeakReference<Timer> refTimer;
public MyHandler(ImageView imageView, Timer timer) {
refImge = new WeakReference<ImageView>(imageView);
refTimer = new WeakReference<Timer>(timer);
}
@Override
public void handleMessage(Message msg) {
if (refImge.get() != null) {
Drawable drawable = refImge.get().getBackground();
drawable.setLevel(drawable.getLevel() + 1000);
if (drawable.getLevel() >= 10000) {
if (refTimer.get() != null) {
refTimer.get().cancel();
}
}
}
}
}
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image);
Drawable rotateDrawable = getResources().getDrawable(R.drawable.rotate_drawable);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
imageView.setBackground(rotateDrawable);
}else{
imageView.setBackgroundDrawable(rotateDrawable);
}
imageView.post(new Runnable() {
@Override
public void run() {
timer = new Timer();
handler = new MyHandler(imageView, timer);
timer.schedule(new TimerTask() {
public void run() {
Message msg = handler.obtainMessage();
msg.what = 0x1233;
handler.sendMessage(msg);
}
}, 500,800);
}
});
}
@Override
protected void onDestroy() {
Message msg = handler.obtainMessage();
if(msg!=null){
handler.removeMessages(msg.what);
}
super.onDestroy();
}