效果:
<SeekBar
android:id="@+id/seekbar"
android:layout_width="200dp"
android:layout_height="30dp"
android:thumb="@drawable/thumb"
android:progressDrawable="@drawable/seekbar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:max="100"
android:progress="50"/>
public class MainActivity extends AppCompatActivity {
SeekBar seekBar;
private RotateDrawable mRotateThumbDrawable;
ObjectAnimator thumbAnimator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRotateThumbDrawable = (RotateDrawable) AppCompatResources.getDrawable(getApplicationContext(), R.drawable.rotationanimation);
seekBar = findViewById(R.id.seekbar);
startRotation();
}
public void startRotation() {
seekBar.setThumb(mRotateThumbDrawable);
thumbAnimator = ObjectAnimator.ofInt(mRotateThumbDrawable,"level", 0, 10000);
// 设置动画时长
thumbAnimator.setDuration(400);
// 设置重复次数和行为
thumbAnimator.setRepeatCount(ValueAnimator.INFINITE);
thumbAnimator.setInterpolator(new LinearInterpolator());
// 启动动画
thumbAnimator.start();
}
public void stopRotation() {
if (thumbAnimator != null) {
thumbAnimator.cancel();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
stopRotation();
}
}
//rotationanimation.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:zAdjustment = "normal"
android:duration="5000"
android:drawable="@drawable/thumb"
android:repeatMode="reverse"
android:repeatCount="infinite"
android:fromDegrees="0"
android:toDegrees="360" />
动画应该在子线程做比较好,这里只为了实现效果,偷个懒~