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

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

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

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

10.02.2016, 11:07. Просмотров 532. Ответов 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
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 293
12.02.2016, 10:22  [ТС] #16
Spelcrawler, а можете написать как это будет? используя код расчета из 9 поста
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
12.02.2016, 10:24 #17
Цитата Сообщение от Pir12345 Посмотреть сообщение
используя код расчета из 9 поста
Если честно вообще не понял что там происходит, если опишете подробно алгоритм словами могу попробовать.
0
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 293
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
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
12.02.2016, 10:46 #19
Pir12345, а период моргания одинаковый везде?
0
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 293
12.02.2016, 10:48  [ТС] #20
Spelcrawler, период моргания каждого цвета одинаковый, а между каждым цветом можно ввести числовую задержку. Если это число маленькое, то мигание будет очень быстрым, если большое, то каждый цвет "повисит" на экране
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
12.02.2016, 11:35 #21
Pir12345, в общем так и не понял каким способом генерируются цвета. Если этот генератор принимает массив чисел ({1, 2, 3}) и выдает что-то на подобии {1,2,3},{1,3,2},{312}... - можно вместо цифр посылать туда сразу цвета т.к. они представлены в int. Если все так - то вот кастомная вьюшка, которая моргает:
Кликните здесь для просмотра всего текста
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
65
66
67
68
69
70
71
72
73
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
 
public class BlinkingView extends View {
 
    private int mColorIndex = -1;
    private int[] mColors;
    private long mDuration;
 
    public BlinkingView(Context context) {
        super(context);
    }
 
    public BlinkingView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public BlinkingView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
 
    public void startBlinking(int[] colors, long duration) {
        mColorIndex = 0;
        mColors = colors;
        mDuration = duration;
        changeColor();
    }
 
    public void startBlinking(int[][] colors, long duration) {
        if (colors.length < 1) return;
        int size = colors.length * colors[0].length;
        int[] colorsArray = new int[size];
 
        for (int i = 0; i < colors.length; i++) {
            for (int j = 0; j < colors[i].length; j++) {
                colorsArray[i * colors[i].length + j] = colors[i][j];
            }
        }
 
        startBlinking(colorsArray, duration);
    }
 
    private void changeColor() {
        invalidate();
        postDelayed(new Runnable() {
            @Override
            public void run() {
                if (mColorIndex < mColors.length - 1) {
                    mColorIndex++;
                    changeColor();
                } else {
                    mColorIndex = -1;
                    invalidate();
                }
            }
        }, mDuration);
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int color;
        if (mColorIndex == -1) {
            color = Color.WHITE;
        } else {
            color = mColors[mColorIndex];
        }
        canvas.drawColor(color);
    }
}


Можно просто скопировать весь код в новый класс с именем BlinkingView. У этой вьюшки есть метод startBlinking, который принимает либо int[] и long, либо int[][] и long. В обоих случаях первый параметр массив цветов, а второй длительность каждого цвета. Если послать туда двумерный массив он просто перегоняется в одномерный, а дальше все так же. Но тут нужно, чтобы все "строки" в массиве были одной длины, иначе будет ошибка. Используется так:

Java
1
2
3
4
int[][] colors = new int[][] {{0xFFFF0000, 0xFF00FF00, 0xFF0000FF}, {0xFFFF0000, 0xFF00FF00, 0xFF0000FF}, {0xFFFF0000, 0xFF00FF00, 0xFF0000FF}};
//это просто произвольный массив цветов, у себя используйте тот, что получается сейчас.
 
((BlinkingView) findViewById(R.id.blinkingView)).startBlinking(colors, 3000);
0
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 293
12.02.2016, 11:45  [ТС] #22
Вместо цифр посылать цвета не совсем так, потому что начальная последовательность будет задаваться не жёстко. То есть входной параметр программы будет задаваться в виде семи чисел (он может быть 1234567 или 1342567 и т.д.), и относительно того, как будут располагаться числа во входной последовательности, будет формироваться матрица а соответственно и порядок выведения цветов на экран.
Каким образом генерируются цвета на экран- согласно сформированной матрицы.
Например, если матрица
1234567
1234576
....
то при запуске на экране появится красный цвет(цифра 1), потом оранжевый(цифра 2) и т.д....до конца первой строчки матрицы. Потом читается вторая строчка матрицы- то есть опять красный(1)...фиолетовый(7),синий(6)....и т.д. до конца матрицы
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
12.02.2016, 11:48 #23
Pir12345, тогда создаем массив цветов отдельно и в массив результата (тот который двумерный кладем уже не цифру а цвет)

Java
1
2
3
4
5
//цвета
int colors[] = {0xFFFF0000, 0xFF00FF00, 0xFF0000FF};
 
//а так набиваем результат
result[i][j] = colors[n];//тут n - то число, которое сейчас помещается в этот массив.
0
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 293
12.02.2016, 12:15  [ТС] #24
Не совсем понятны последние 2 поста, в частности почему blinking 13-14, 17-19 строчки почти не содержат данных.
и хотел узнать, а куда мой код тут вставить?
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
12.02.2016, 12:45 #25
Цитата Сообщение от Pir12345 Посмотреть сообщение
почему blinking 13-14, 17-19 строчки почти не содержат данных.
Это конструкторы, в данном случае дефолтные, все операции в супер классе происходят.
Цитата Сообщение от Pir12345 Посмотреть сообщение
куда мой код тут вставить?
Никуда, просто получаете свой массив цветов и вызываете startBlinking у BlinkingView. Его предварительно нужно добавить в разметку. Если не знаете как лучше почитать уроки тут.
0
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 293
12.02.2016, 13:37  [ТС] #26
А если BlinkingView не оспользовать, а сделать так, чтобы при нажатии кнопки запуска, мигание началось на весь экран(ну то есть всё меню "гасится" и появляется очередной цвет на весь экран). Так возможно? (яркий пример- приложение фонарик- сирена. Только в нем 2 цвета, а тут будет 7)
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
12.02.2016, 13:38 #27
Pir12345, ну можно растянуть эту вьюшку на весь экран, можно у любой стандартной вьюшки менять бекграунд как выше советовали. Вариантов очень много, советую почитать уроки по ссылке выше.
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,863
Завершенные тесты: 1
12.02.2016, 15:52 #28
в чем прикол рисовать onDraw-ом вместо одной строчки setBackgroundColor ?
1
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
12.02.2016, 16:02 #29
Цитата Сообщение от Паблито Посмотреть сообщение
в чем прикол рисовать onDraw-ом вместо одной строчки setBackgroundColor ?
Да особо разницы то нет конечно, да и там одна строчка по идее. Чет я привык если можно все рисовать на канвасе, может и плохо это, но мне нравится) А кастомный класс всяко удобнее чем воротить все в той же активити.
0
Pablito
12.02.2016, 16:08     Генерация цветовых экранов
  #30

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2016, 16:08
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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