Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中使用自定义视图加载动画_Java_Android_Animation - Fatal编程技术网

Java 在Android中使用自定义视图加载动画

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

在CodeReview上发布了这个问题,但没有得到太多回应。代码审查链接

我为Android应用程序创建了一个加载程序动画:一个简单的3点加载程序

它正在工作。但这是使用TimerTask制作动画的正确方法吗

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