как исправить проблему, пока обновляется / обновляется - показывать анимацию? - PullRequest
2 голосов
/ 16 мая 2011

простой вопрос может быть, но не может найти решение.

У меня есть кнопка для обновления / обновления содержимого. Кнопка называется «обновить». На фоне этой кнопки - у меня есть изображение. Я хочу установить вращаемую анимацию для этого изображения, пока мой контент обновляется. Но у меня есть некоторые проблемы: во-первых, мой контент обновлен, и только тогда я вижу анимацию: вот мой код:

 Timer myTimer;
    public void timerS()
    {
      myTimer = new Timer();
        myTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                TimerMethod();
            }
        }, 0, 100);
    }
    private void TimerMethod()
    {
        this.runOnUiThread(Timer_Tick);
    }

    private Runnable Timer_Tick = new Runnable() {
        public void run() {
         // drawMatrix();
            animation();
             seconds++;
         }

    };
    int degree =60;
    int oneClick=1;
    public int nowUpdated = 0;
      public void animation()
        {
        int   currentRotation = 0;
            RotateAnimation anim = new RotateAnimation(currentRotation, (360*4),
                    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
            currentRotation = (currentRotation + 45) % 360;

            anim.setInterpolator(new LinearInterpolator());
            anim.setDuration(10000);
            anim.setFillEnabled(true);

            anim.setFillAfter(true);
            refresh.startAnimation(anim);
        }

Я пытался использовать таймер для этого. Сначала мой пример был с drawMatrix - но там я не могу решить проблему с размером изображения. Когда мое изображение поворачивается - анимация очень большая. Размер изображения 32x32 .. но когда кликните для обновления - я думаю, что размер изображения составляет 64x64. и не могу это исправить Вот код для рисования матрицы:

public void drawMatrix()
    {
        if(nowUpdated==1)
        {
         Matrix mat = new Matrix();
         degree=degree+45;
         mat.postRotate(degree);
         Bitmap source = BitmapFactory.decodeResource(getResources(),R.drawable.refresh);

         Bitmap a = Bitmap.createBitmap(source, 0, 0,  32 ,  32, mat, true);
         Drawable d =new BitmapDrawable(a);
         refresh.setBackgroundDrawable(d);
        } 
     }

пожалуйста, если кто-нибудь может мне помочь - скажите, пожалуйста, как исправить мой первый код или второй. С уважением, Питер.

1 Ответ

1 голос
/ 16 мая 2011

, как обсуждалось в чате: используйте AsyncTask для обработки обновлений (в doInBackground ()) и перед началом фактической обработки - вызовите publishProgress () - который вызовет метод AsyncTask onProgressUpdate (который вам придется переопределить) и запустите анимацию там :) - последний шаг необходим, потому что onProgressUpdate может выполнять работу с потоками пользовательского интерфейса - doInBackground не может (потому что он не работает в потоке пользовательского интерфейса).

Cheers,

Ready4Android

...