Android: вращающаяся кнопка на волоске

1

Может ли кто-нибудь предоставить примерную реализацию для поворота кнопки в потоке? На данный момент я вращаю свою кнопку в потоке пользовательского интерфейса, используя следующий код:

Animation ranim = (Animation) AnimationUtils.loadAnimation(getBaseContext(),
                    R.anim.rotation);
                buttonRotate.setAnimation(ranim);
  • 0
    Вы говорите, что хотите использовать нить для поворота кнопки?
  • 0
    Да, это то, что я хочу сделать.
Показать ещё 5 комментариев
Теги:
multithreading
handler
runnable

3 ответа

0
Лучший ответ

следующие должны работать на вас.

Thread thread = new Thread() 
{ 
    @Override 
    public void run() { 
        try { 
                Animation ranim = (Animation) AnimationUtils.loadAnimation(getBaseContext(), 
                R.anim.rotation); 
                buttonRotate.setAnimation(ranim); 
        } catch (InterruptedException e) { 
            e.printStackTrace(); 
        } 
    } 
}; 

thread.start(); 

вам может понадобиться создать AsyncTask который может работать независимо, не нарушая AsyncTask UI Thread.

  • 0
    Это все еще заставляет кнопку вращаться после обработки данных
  • 0
    Я бы порекомендовал вам обработать ваши данные через AsyncTask и повернуть кнопку в AsyncTask UI Thread . Логика заключается в том, что это UI Task и вы можете передать ее worker Thread но этот worker Thread конечном итоге должен перенести эту задачу в UI Thread и обработать ее. Но выполнение обработки данных через AsyncTask позволит worker Thread AsyncTask выполнять всю обработку данных, пока AsyncTask UI Thread вращает кнопку.
0

К сожалению, у меня нет доступа к моей IDE на данный момент, поэтому я собираюсь перечислить шаги для вас, вместо того, чтобы указывать здесь код ошибки.

1) Внедрите "AnimationListener" в том же классе, который расширяет Activity. 2) Установите кнопку прослушивания кликов на вашей кнопке. 3) Создайте класс AsyncTask. 4) Переопределите doInBackground (из AsyncTask) и разместите там свою ресурсоемкую логику. 5) В onAnimationStart (из AnimationListener) реализует логику для вызова вашей AsyncTask, то есть новую MyTask(). Execute(); 6) Определите анимацию и установите ее на свою кнопку.

Вот как это должно получиться: вы нажимаете кнопку, вызывается onAnimationStart, запускаются логика и анимация AsyncTask. Таким образом, вы можете поворачивать свою кнопку тем же, что ваш фоновый поток выполняет интенсивные операции с ресурсами - то есть одновременно.

И просто для удовольствия, вы можете отключить кнопку от щелчка снова до завершения фоновой задачи.

Извините за недостаток кода, но это должно быть довольно прямолинейно отсюда.

0

в потоке пользовательского интерфейса определите

Handler mainHandler = new Handler();

затем внутри вашей нити, используйте это:

mainHandler.post(new Runnable()
{
    public void run()
    {
       //your piece of code
    }
});

Это послужило мне до сих пор в нескольких случаях, надеюсь, это и для вас! : D

РЕДАКТИРОВАТЬ:

mainHandler.post(new Runnable()
{
    public void run()
    {
            while(someBoolean==true)
            {
                //your piece of code
            }
    }
});

если бы вы определили "someBoolean" внутри вашего класса, как и вы с обработчиком, поток, как предполагается, получит его, я считаю.
таким образом, после обработки ваших данных просто установите someBoolean на false, а вращающиеся остановки.

  • 0
    Я думаю, что это все еще будет публиковать исполняемый файл в потоке пользовательского интерфейса. Вам нужно создать объект Thread вместо Runnable, чтобы удалить его из потока пользовательского интерфейса.
  • 0
    это то, что он должен делать, что я понял из его вопроса, что он хочет манипулировать пользовательским интерфейсом в другом потоке
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню