Java 在Android中使用自定义视图加载动画
在CodeReview上发布了这个问题,但没有得到太多回应。代码审查链接 我为Android应用程序创建了一个加载程序动画:一个简单的3点加载程序 它正在工作。但这是使用TimerTask制作动画的正确方法吗Java 在Android中使用自定义视图加载动画,java,android,animation,Java,Android,Animation,在CodeReview上发布了这个问题,但没有得到太多回应。代码审查链接 我为Android应用程序创建了一个加载程序动画:一个简单的3点加载程序 它正在工作。但这是使用TimerTask制作动画的正确方法吗 public class ThreeDotsLoader extends View { Paint dot1; Paint dot2; Paint dot3; int defaultColor; int highlightColor; boolean animationStarted
public class ThreeDotsLoader extends View {
Paint dot1;
Paint dot2;
Paint dot3;
int defaultColor;
int highlightColor;
boolean animationStarted = false;
TimerTask task;
Timer timer;
int count = 1;
public ThreeDotsLoader(Context context, AttributeSet attrs) {
super(context, attrs);
defaultColor = Color.rgb(44, 78, 82);
highlightColor = Color.WHITE;
initPaint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.d("custom", "ondraw");
canvas.drawCircle(50, 50, 15, dot1);
canvas.drawCircle(100, 50, 15, dot2);
canvas.drawCircle(150, 50, 15, dot3);
}
private void initPaint(){
dot1 = new Paint();
dot1.setColor(defaultColor);
dot1.setStyle(Paint.Style.FILL);
dot1.setAntiAlias(true);
dot2 = new Paint();
dot2.setColor(defaultColor);
dot2.setStyle(Paint.Style.FILL);
dot2.setAntiAlias(true);
dot3 = new Paint();
dot3.setColor(defaultColor);
dot3.setStyle(Paint.Style.FILL);
dot3.setAntiAlias(true);
}
public void startLoading(){
task = new TimerTask() {
@Override
public void run() {
switch(count){
case 1:
dot1.setColor(highlightColor);
dot2.setColor(defaultColor);
dot3.setColor(defaultColor);
count++;
break;
case 2:
dot1.setColor(defaultColor);
dot2.setColor(highlightColor);
dot3.setColor(defaultColor);
count++;
break;
case 3:
dot1.setColor(defaultColor);
dot2.setColor(defaultColor);
dot3.setColor(highlightColor);
count = 1;
break;
}
animationStarted = true;
postInvalidate();
}
};
timer = new Timer();
timer.schedule(task, 0, 300);
}
public void stopLoading(){
animationStarted = false;
timer.cancel();
}
}
我会建议使用有一些
对它正在工作。但是有没有更好的方法呢?我建议使用。
While rescheduling Handler is very easy, you can not reschedule Timer
In Handler you can attach to any Runnable but Timer schedule for only one TimerTask
TimerTask is purely background task so you can not update UserInterface, but that's not true for Handler's Runnables