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

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

Войти
Регистрация
Восстановить пароль
 
 
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
#1

Генерация цветовых экранов - Android

10.02.2016, 11:07. Просмотров 477. Ответов 29
Метки нет (Все метки)

Добрый день! Необходимо реализовать мигание экрана смартфона в соответствии с определенным алгоритмом (что то на подобии милицейской сирены). Не могу найти пример программы в сети.
Собственно вопрос. Как лучше это реализовать: Задать цвета для основного Layout в файле ресурсов, а затем программно по алгоритму закрашивать экраны? Создать для каждого цвета свой Layout, а потом программно из вызывать? Как будет более оптимальнее и правильнее?
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
10.02.2016, 12:07     Генерация цветовых экранов #2
Pir12345, да просто менять background тек. layout-а
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
10.02.2016, 12:10  [ТС]     Генерация цветовых экранов #3
YuraAAA, я просто думаю что если это сделать заменой background да еще и в цикле, то приложение будет зависать. Там нужно как то sleep() задержку поставить что ли?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
10.02.2016, 12:22     Генерация цветовых экранов #4
Pir12345, почитайте про Thread.sleep.
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,213
Завершенные тесты: 1
10.02.2016, 12:35     Генерация цветовых экранов #5
пфф
1. делаем несложный метод
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    void startBlinking(final View v, final int[] color, final long[] duration) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < color.length; i++) {
                    final int pos = i;
                    v.post(new Runnable() {
                        @Override
                        public void run() {
                            v.setBackgroundColor(color[pos]);
                        }
                    });
                    try {
                        Thread.sleep(duration[i]);
                    } catch (InterruptedException ignore) {
                    }
                }
            }
        }).start();
    }
2. формируем пару массивов - цвета и длительности
Java
1
2
        long[] duration = {3000, 1500, 5000, 500, 1000};
        int[] color = {Color.RED, Color.MAGENTA, Color.rgb(128, 192, 255), Color.BLACK, Color.WHITE};
3. вызываем, не забыв передать в метод вьюшку, которая будет мигать и оба массива
Java
1
        startBlinking(view, color, duration);
4. PROFIT
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
10.02.2016, 12:39     Генерация цветовых экранов #6
5 раз помигает и успокоится
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
10.02.2016, 12:41     Генерация цветовых экранов #7
Я бы делал через Handler#postDelayed
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,213
Завершенные тесты: 1
10.02.2016, 12:44     Генерация цветовых экранов #8
Внимание!!! Это был пример, если что.

Я рассматривал вариант с postDelayed, но сам не знаю почему набросал пример вот так. По крайней мере я хоть чот-то набросал.
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
10.02.2016, 12:49  [ТС]     Генерация цветовых экранов #9
Да, Паблито, и за это вам большое спасибо!
Позвольте я канкртетизирую что нужно.
Есть алгоритм:
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
58
59
60
61
62
63
64
public class JavaApplication8 {
static int count = 0;
String s = "";
 
static int arr_matrix[][] = new int [7][5040];
static void permute(java.util.List<Integer> arr, int k){
   // ;
        for(int i = k; i < arr.size(); i++){
            java.util.Collections.swap(arr, i, k);
            permute(arr, k+1);
            java.util.Collections.swap(arr, k, i);
        }
        
        if (k == arr.size() -1){
            for(int i = 0; i < arr.size(); i++){
                arr_matrix[i][count] = arr.get(i);
            }
            count++; 
           // System.out.println(java.util.Arrays.toString(arr.toArray()));
            
        }  
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       java.util.List<Integer> arr_list =  java.util.Arrays.asList(1,2,3,4,5,6,7);
       
       JavaApplication8.permute(arr_list, 0);
       int arr_tmp[] = new int [7];
        for(int i = 0; i < 840; i++) {
            for(int j = 0; j < 7; j++){
                arr_tmp[j] = arr_matrix[j][6*i + 4];
                arr_matrix[j][6*i + 4] = arr_matrix[j][6*i + 2];
                arr_matrix[j][6*i + 2] = arr_tmp[j];
            }
            
            for(int j = 0; j < 7; j++){
                arr_tmp[j] = arr_matrix[j][6*i + 5];
                arr_matrix[j][6*i + 5] = arr_matrix[j][6*i + 3];
                arr_matrix[j][6*i + 3] = arr_tmp[j];
            }  
            for(int j = 0; j < 7; j++){
                arr_tmp[j] = arr_matrix[j][6*i + 4];
                arr_matrix[j][6*i + 4] = arr_matrix[j][6*i + 5];
                arr_matrix[j][6*i + 5] = arr_tmp[j];
            }             
             
 
         }
        String m_tmp = "";
        for(int i = 0; i < 5040; i++) {
            m_tmp = "";
            for(int j = 0; j < 7; j++){
                m_tmp = m_tmp + arr_matrix[j][i];
            }   
            System.out.println(m_tmp);
            
        }
        //System.out.println(" count = " + count);
 
    }
 
}
Он прекрасно компилируется и запускается в NetBeans

Я пытаюсь адаптировать его в Android Studio с доработкой вывода цветов.
То есть. Вводится массив чисел. Производится расчет по алгоритму.

А вот теперь нужно каждой цифре сопоставить цвет. Затем по нажатию кнопки, цвета выводятся экран (построчно).
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,213
Завершенные тесты: 1
10.02.2016, 12:52     Генерация цветовых экранов #10
Цитата Сообщение от Pir12345 Посмотреть сообщение
цвета выводятся экран (построчно).
щито?
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
10.02.2016, 12:57  [ТС]     Генерация цветовых экранов #11
Паблито, то есть в результате алгоритма формируется матрица чисел
а1,а2,а3...а7
.....

Каждому числу присваивается цвет. Вывод цветов на экран выводится а1-первый цвет, а2-второй цвет и так до конца первой строки матрицы, потом переходит на вторую строчку и т.д. пока не пройдет все строчки. То есть на экране будет генерироваться набор цветов от начала до конца матрицы.
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,213
Завершенные тесты: 1
10.02.2016, 13:26     Генерация цветовых экранов #12
теперь понятно, что значит "построчно" в этом контексте
ну я практически угадал с реализацией, надо просто подготавливать два массива из тех, что получены при расчетах

Юра предложил делать немного по другому, я попытался набросать не в уме, а в ide и у меня получилось строк не меньше чем в том варианте который я уже написал

может кто-то сделает короче и красивее, мне лично нравится и свой вариант
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
10.02.2016, 13:30  [ТС]     Генерация цветовых экранов #13
Паблито, мне тоже нравиться ваш вариант, на сколько я его понял. Я раньше делал такую штуку, только на С++(тоже использовал Thread).Только вот как ваш вариант прикрутить к моему алгоритму, да еще и в рамках элементов Android studio?
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,213
Завершенные тесты: 1
10.02.2016, 13:45     Генерация цветовых экранов #14
ну надо создать какое-то вью которое будет менять цвет, разместитьего на экране
сделать кнопку Старт если она нужна
подготовить массив цветов и если время показа цветов на экране одинаковое то немного переделать мой метод - вместо массива длительностей передать просто число - сколько времени будет показываться каждый цвет

я не знаю как еще объяснить, но все писать с нуля я не стану )
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
10.02.2016, 14:00     Генерация цветовых экранов #15
А я бы сделал кастомную вьюшку, передавал ей массив объектов (цвет, длительность) и красил на канвасе)
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
12.02.2016, 10:22  [ТС]     Генерация цветовых экранов #16
Spelcrawler, а можете написать как это будет? используя код расчета из 9 поста
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.02.2016, 10:24     Генерация цветовых экранов #17
Цитата Сообщение от Pir12345 Посмотреть сообщение
используя код расчета из 9 поста
Если честно вообще не понял что там происходит, если опишете подробно алгоритм словами могу попробовать.
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
12.02.2016, 10:32  [ТС]     Генерация цветовых экранов #18
Spelcrawler, Происходит там так. Берется фиксированный массив чисел- 1,2,3,4,5,6,7. Задача алгоритма из 9 поста вывести из указанной числовой последовательности матрицу чисел путем перебора их с конца, то есть в результате вычислений получается матрица
1234567
1234576
1234756
.....
7654213- последняя строчка
То есть получится матрица из 7 столбцов и будет 5040 строк (7 факториал).

А дальше, что просил вас, нужно каждой цифре соотнести цвет(1-красный, 2-оранжевый, 3-желтый,4-зеленый,5-голубой,6-синий,7 фиолетовый). А потом выводить эти цвета на экран читая получившуюся матрицу, последовательно слева-направо, сверху вниз.
P.S. Получится мигание цветов на экране
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.02.2016, 10:46     Генерация цветовых экранов #19
Pir12345, а период моргания одинаковый везде?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2016, 10:48     Генерация цветовых экранов
Еще ссылки по теме:

Android Создание экранов
Android Указать цвет текста, подходящий для разных цветовых тем
Поясните про поддержку разных экранов Android
Dimens для разных экранов Android
Как реализовать смену экранов жестами Basic4Android

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

Или воспользуйтесь поиском по форуму:
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
12.02.2016, 10:48  [ТС]     Генерация цветовых экранов #20
Spelcrawler, период моргания каждого цвета одинаковый, а между каждым цветом можно ввести числовую задержку. Если это число маленькое, то мигание будет очень быстрым, если большое, то каждый цвет "повисит" на экране
Yandex
Объявления
12.02.2016, 10:48     Генерация цветовых экранов
Ответ Создать тему
Опции темы

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