Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Pir12345
42 / 0 / 1
Регистрация: 05.01.2014
Сообщений: 305
#1

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

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

Добрый день! Необходимо реализовать мигание экрана смартфона в соответствии с определенным алгоритмом (что то на подобии милицейской сирены). Не могу найти пример программы в сети.
Собственно вопрос. Как лучше это реализовать: Задать цвета для основного Layout в файле ресурсов, а затем программно по алгоритму закрашивать экраны? Создать для каждого цвета свой Layout, а потом программно из вызывать? Как будет более оптимальнее и правильнее?
Спасибо.
http://www.cyberforum.ru/android-dev/thread1376256.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2016, 11:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Генерация цветовых экранов (Программирование Android):

Создание экранов
Только начал изучать Android да и Java тоже. Хочу узнать, как сделать несколько...

Перелистывание экранов
Если кто пользовался официальным приложение для ВК под андройд, то в разделе...

Размеры экранов планшетов
Всем привет. Вот какая штука. У гуглов в доках сказано что если в папочку...

Про DPI экранов
Как быть, я сделал текстовое приложение без графики, а на различных девайсах...

TabHost и переключение экранов
Доброго времени суток и с Днём Программиста!=) У меня возникла ситуация......

29
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
10.02.2016, 12:07 #2
Pir12345, да просто менять background тек. layout-а
0
Pir12345
42 / 0 / 1
Регистрация: 05.01.2014
Сообщений: 305
10.02.2016, 12:10  [ТС] #3
YuraAAA, я просто думаю что если это сделать заменой background да еще и в цикле, то приложение будет зависать. Там нужно как то sleep() задержку поставить что ли?
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
10.02.2016, 12:22 #4
Pir12345, почитайте про Thread.sleep.
0
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 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
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
10.02.2016, 12:39 #6
5 раз помигает и успокоится
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
10.02.2016, 12:41 #7
Я бы делал через Handler#postDelayed
0
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 1
10.02.2016, 12:44 #8
Внимание!!! Это был пример, если что.

Я рассматривал вариант с postDelayed, но сам не знаю почему набросал пример вот так. По крайней мере я хоть чот-то набросал.
0
Pir12345
42 / 0 / 1
Регистрация: 05.01.2014
Сообщений: 305
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 с доработкой вывода цветов.
То есть. Вводится массив чисел. Производится расчет по алгоритму.

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

Каждому числу присваивается цвет. Вывод цветов на экран выводится а1-первый цвет, а2-второй цвет и так до конца первой строки матрицы, потом переходит на вторую строчку и т.д. пока не пройдет все строчки. То есть на экране будет генерироваться набор цветов от начала до конца матрицы.
0
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 1
10.02.2016, 13:26 #12
теперь понятно, что значит "построчно" в этом контексте
ну я практически угадал с реализацией, надо просто подготавливать два массива из тех, что получены при расчетах

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

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

я не знаю как еще объяснить, но все писать с нуля я не стану )
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
10.02.2016, 14:00 #15
А я бы сделал кастомную вьюшку, передавал ей массив объектов (цвет, длительность) и красил на канвасе)
0
Pir12345
42 / 0 / 1
Регистрация: 05.01.2014
Сообщений: 305
12.02.2016, 10:22  [ТС] #16
Spelcrawler, а можете написать как это будет? используя код расчета из 9 поста
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.02.2016, 10:24 #17
Цитата Сообщение от Pir12345 Посмотреть сообщение
используя код расчета из 9 поста
Если честно вообще не понял что там происходит, если опишете подробно алгоритм словами могу попробовать.
0
Pir12345
42 / 0 / 1
Регистрация: 05.01.2014
Сообщений: 305
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. Получится мигание цветов на экране
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.02.2016, 10:46 #19
Pir12345, а период моргания одинаковый везде?
0
Pir12345
42 / 0 / 1
Регистрация: 05.01.2014
Сообщений: 305
12.02.2016, 10:48  [ТС] #20
Spelcrawler, период моргания каждого цвета одинаковый, а между каждым цветом можно ввести числовую задержку. Если это число маленькое, то мигание будет очень быстрым, если большое, то каждый цвет "повисит" на экране
0
12.02.2016, 10:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2016, 10:48
Привет! Вот еще темы с решениями:

Горизонтальная прокрутка экранов
Здравствуйте. Подскажите пожалуйста, как можно создать частичную...

Разметка для разных экранов
У меня такой вопрос как сделать разметку для разных размеров экранов наиболее...

Поддержка нескольких типов экранов
Добрый вечер. В программировании для android я совсем недавно. Возникла...

Dimens для разных экранов
Я хочу сделать для разных экранов разный размер шрифта. Как бы мне это сделать?...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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