Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Указать цвет текста, подходящий для разных цветовых тем - Программирование Android
Есть напр. 2 темы: Theme.AppCompat - темная Theme.AppCompat.Light - светлая Вот как указать одним стилем что цвет TextView при...

Создание экранов - Программирование Android
Только начал изучать Android да и Java тоже. Хочу узнать, как сделать несколько экранов. Типа авторизация, при успешной открытие 2-ого...

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

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

Размеры экранов планшетов - Программирование Android
Всем привет. Вот какая штука. У гуглов в доках сказано что если в папочку sw600dp положить разметку, то она будет самостоятельно работать...

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

29
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
10.02.2016, 12:07 #2
Pir12345, да просто менять background тек. layout-а
0
Pir12345
42 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 295
10.02.2016, 12:10  [ТС] #3
YuraAAA, я просто думаю что если это сделать заменой background да еще и в цикле, то приложение будет зависать. Там нужно как то sleep() задержку поставить что ли?
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
10.02.2016, 12:22 #4
Pir12345, почитайте про Thread.sleep.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
10.02.2016, 12:39 #6
5 раз помигает и успокоится
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
10.02.2016, 12:41 #7
Я бы делал через Handler#postDelayed
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
10.02.2016, 12:44 #8
Внимание!!! Это был пример, если что.

Я рассматривал вариант с postDelayed, но сам не знаю почему набросал пример вот так. По крайней мере я хоть чот-то набросал.
0
Pir12345
42 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 295
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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
10.02.2016, 12:52 #10
Цитата Сообщение от Pir12345 Посмотреть сообщение
цвета выводятся экран (построчно).
щито?
0
Pir12345
42 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 295
10.02.2016, 12:57  [ТС] #11
Паблито, то есть в результате алгоритма формируется матрица чисел
а1,а2,а3...а7
.....

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

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

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

я не знаю как еще объяснить, но все писать с нуля я не стану )
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
10.02.2016, 14:00 #15
А я бы сделал кастомную вьюшку, передавал ей массив объектов (цвет, длительность) и красил на канвасе)
0
10.02.2016, 14:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2016, 14:00
Привет! Вот еще темы с ответами:

TabHost и переключение экранов - Программирование Android
Доброго времени суток и с Днём Программиста!=) У меня возникла ситуация... ЕстьTabHost c тремя вкладками. Содержимым каждой вкладки...

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

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

Dimens для разных экранов - Программирование Android
Я хочу сделать для разных экранов разный размер шрифта. Как бы мне это сделать? Я создал папку values-sw480dp-hdpi для экрана HTC One V(на...


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

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

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