我使用多线程时如何使用动画(application.class)

时间:2015-05-18 09:10:43

标签: java android multithreading

我不是英语母语人士。 如果你不明白我在写什么,请告诉我。

这是个问题。

我想在MainActivity中控制startColorAnimation。 但是,我正在使用Multithread。 这意味着我正在使用Application.class。 此Application类将数据[id]发送到MainActivity(和startColorAnimation)。

如果我使用Multithread,我必须使用“handler”。 但是,我无法理解如何编写代码。

请告诉我如何编写处理程序(和其他人)。

此处startColorAnimation中的MainActivity

public void startColorAnimation(int id){

    if (id == mode) return;
    if(COLOR_START.length <= id || COLOR_END.length <= id ) return;
    mode = id;
    int colorStart = COLOR_START[id];
    int colorEnd = COLOR_END[id];
    int setDuration = PATTERN[id];


    ValueAnimator colorAnim = ObjectAnimator.ofInt(image, "backgroundColor", colorStart, colorEnd);
    colorAnim.setDuration(1000);
    colorAnim.setEvaluator(new ArgbEvaluator());
    colorAnim.setRepeatCount(1);
    colorAnim.start();

}

1 个答案:

答案 0 :(得分:0)

看起来你试图在线程上做GUI的东西会失败,你可以使用这样的东西:

我正在使用runOnUiThread,它将在GUI线程上执行动画,并且应该解决您的问题,简单地用活动名称替换“MainActivity”。

public void startColorAnimation (int id) {

    MainActivity.this.runOnUiThread (new Runnable () {
        public void run () {
            if (id == mode) return;
            if (COLOR_START.length <= id || COLOR_END.length <= id) return;
            mode = id;
            int colorStart = COLOR_START[id];
            int colorEnd = COLOR_END[id];
            int setDuration = PATTERN[id];


            ValueAnimator colorAnim = ObjectAnimator.ofInt (image, "backgroundColor", colorStart, colorEnd);
            colorAnim.setDuration (1000);
            colorAnim.setEvaluator (new ArgbEvaluator ());
            colorAnim.setRepeatCount (1);
            colorAnim.start ();
        }
    });
}