Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
#1

Свой собственный прогресс бар - Программирование Android

04.12.2013, 22:00. Просмотров 1948. Ответов 5
Метки нет (Все метки)

Доброй ночи ув. Программисты.

4й час в поисках и без результатно все одно и то же. А того что надо нет.
Подскажите как реализовать следующее:

- Есть AsyncTask который выполняет определённые действия
- Есть 25 картинок следующего вида: Название: progress.jpg
Просмотров: 478

Размер: 3.6 Кб
- Есть Лист Анимации xml:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 <animation-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <item android:drawable="@drawable/a1" android:duration="250"/>
        <item android:drawable="@drawable/a2" android:duration="250"/>
        <item android:drawable="@drawable/a3" android:duration="250"/>
        <item android:drawable="@drawable/a4" android:duration="250"/>
        <item android:drawable="@drawable/a5" android:duration="250"/>
        <item android:drawable="@drawable/a6" android:duration="250"/>
        <item android:drawable="@drawable/a7" android:duration="250"/>
        <item android:drawable="@drawable/a8" android:duration="250"/>
        <item android:drawable="@drawable/a9" android:duration="250"/>
        <item android:drawable="@drawable/a10" android:duration="250"/>
        <item android:drawable="@drawable/a11" android:duration="250"/>
        <item android:drawable="@drawable/a12" android:duration="250"/>
        <item android:drawable="@drawable/a13" android:duration="250"/>
        <item android:drawable="@drawable/a14" android:duration="250"/>
        <item android:drawable="@drawable/a15" android:duration="250"/>
        <item android:drawable="@drawable/a16" android:duration="250"/>
        <item android:drawable="@drawable/a17" android:duration="250"/>
        <item android:drawable="@drawable/a18" android:duration="250"/>
        <item android:drawable="@drawable/a19" android:duration="250"/>
        <item android:drawable="@drawable/a20" android:duration="250"/>
        <item android:drawable="@drawable/a21" android:duration="250"/>
        <item android:drawable="@drawable/a22" android:duration="250"/>
        <item android:drawable="@drawable/a23" android:duration="250"/>
        <item android:drawable="@drawable/a24" android:duration="250"/>
        <item android:drawable="@drawable/a25" android:duration="250"/>
    </animation-list>
- Есть xml разметка:
XML
1
2
3
4
5
6
7
8
9
10
11
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|left|right|top"
        android:layout_margin="50dp" />
</RelativeLayout>
как заставить в AsynkTask в методе:
Java
1
2
protected void onProgressUpdate(Integer... progress) {
        }
Работать прогресс бар не бесконечно а только тогда когда идет загрузка данных в AsynkTask.

Иногда бывает что данные уже успели загрузиться а анимация ещё идёт или на оборот данных нет а анимация уже закончилась.

Подскажите пожалуйста как решить данную проблему.
За ранее спасибо всем кто откликнется!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 22:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Свой собственный прогресс бар (Программирование Android):

Прогресс бар в кнопку - Программирование Android
Здравствуйте! Подскажите пожалуйста как сделать кнопку, умеющую на себе отображать прогресс выполнения задачи. В стандартной &lt;Button /&gt;...

Собственный статус-бар - Программирование Android
Народ, знает кто как создать собственный статус бар? У меня есть приложение, развернутое на весь экран, мне нужно вывести иконки...

Бар show телефона - Программирование Android
Как убpать веpхний баp телефона?!

Убрать статус бар - Программирование Android
Добрый день. Как я понимаю есть action bar и status bar. В моем приложении я хочу убрать системный status bar, но оставить свой...

Изменить статус бар! - Программирование Android
Как изменить статус бар? Добавлено через 21 минуту верней DroidDraw

Всплывающий бар с кнопкой как в slack - Программирование Android
Ребят очень хочу такой бар для оффлайн сообщений сделать, может знает кто куда копать?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
04.12.2013, 22:27 #2
Если известен объем загружаемых данных, то меняйте картинку только при достижении определенного количества считанных байт.
Привязать каждую картинку к числовому значению, которое будет отражать процент загрузки. При загрузке файла этот самый процент и считать. Отображать только ту картинку к которой "прикреплено" получившееся число.
Если файл изначально меньше буфера сразу выводите финальную картинку.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.12.2013, 22:41 #3
Цитата Сообщение от cezer_ak Посмотреть сообщение
Иногда бывает что данные уже успели загрузиться а анимация ещё идёт или на оборот данных нет а анимация уже закончилась.
Не удивительно, она ведь длится 25*250/1000 секунд.

Как по мне, лучше сразу использовать готовые решения:
https://github.com/Todd-Davies/ProgressWheel
https://github.com/f2prateek/progressbutton
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
05.12.2013, 16:06  [ТС] #4
Цитата Сообщение от KillAndEat Посмотреть сообщение
...
Мне понравилась ваша идея!

А как на счет того что у меня нет объёма загружаемого.

У меня есть 3и последовательно выполняемых AsyncTask, каждый из них занимает своё количество определённого времени(Зависит от скорости интернета).

- Первый просто отправляет на сервер запрос в конце запуская второй Asynk
- Второй отправляет и парсит в конце запуская третий Asynk
- Третий парсит и выводит результат.

У каждого из них есть
onProgressUpdate, OnPostexecute, OnPreexecute и тд.

как тут быть?

Если есть готовый вариант (про то что вы говорили), могу ли я взглянуть?

Добавлено через 8 часов 53 минуты
Цитата Сообщение от KillAndEat Посмотреть сообщение
...
Пришёл к вот такому коду:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class MainActivity extends Activity {
    private static final String TAG = "MyApp";
    private ProgressDialog progressDialog;
    Button buttonStart;
    public String a;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        buttonStart = (Button) findViewById(R.id.buttonStart);   
 
    }
    public void onclick(View v) {
        new MyTask().execute();
    }
 
    class MyTask extends AsyncTask<String, Integer, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            buttonStart.setVisibility(View.INVISIBLE);
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setCancelable(true);
            progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.a1));
            progressDialog.show();
        }
        @Override
        protected Void doInBackground(String... urls) {
           for (int i = 1; i < 25; i ++) {
                a = "a" + i;
            }
            return null;
        }
 
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);       
            Resources res = getResources();
            int myId = res.getIdentifier(a, "drawable", "app.pogress");
            Drawable d = res.getDrawable(myId);
            progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.a1));
            progressDialog.setProgressDrawable(d);
        }
 
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
          
        }
 
 
    }
 
 
}
Но он мне выводит по чему то обычный ProgressBar в диалоге.

Что я тут напортачил, подскажите?
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,432
Записей в блоге: 2
05.12.2013, 16:58 #5
Цитата Сообщение от cezer_ak Посмотреть сообщение
Но он мне выводит по чему то обычный ProgressBar в диалоге.
А где в doInBackground вызов метода publishProgress?
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
05.12.2013, 21:03 #6
Огого, 25 картинок - это круто))
Думаю тут надо делать одну картинку, просто вращать ее и накладывать поверх, создавая копии.

Для того, чтобы правильно отображать прогресс - определите сколько задач всего происходит в потоках и примите их за 100%. А далее уже дело за малым.

Если я знаю, например, что три потока парсят разное количество объектов, то перед парсингом я дождусь получения общего количества объектов и внесу в прогрессбар maxValue = количеству объектов.

А затем буду отображать прогресс.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 21:03
Привет! Вот еще темы с ответами:

Сложить 2 цвета и установить цвет статус бар - Программирование Android
Есть цвет #f78536 и на него накладывается тень #1a000000. Какой будет результирующий цвет? Как это можно узнать? И как потом программно...

Кастомизация прогресс-бара - Программирование Android
Добрый день. Каким образом засунуть в прогресс, вместо колора изображение? Код прилагаю: &lt;layer-list...

Как повесить прогресс диалог секунд на 10? - Программирование Android
Здрвствуйте!Нашел код для парсинга данных с сайта через jsoup. Так вот...иногда данные загружаются долго (зависит от скорости...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.12.2013, 21:03
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru