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

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

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

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

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

Добрый день! Необходимо реализовать мигание экрана смартфона в соответствии с определенным алгоритмом (что то на подобии милицейской сирены). Не могу найти пример программы в сети.
Собственно вопрос. Как лучше это реализовать: Задать цвета для основного Layout в файле ресурсов, а затем программно по алгоритму закрашивать экраны? Создать для каждого цвета свой Layout, а потом программно из вызывать? Как будет более оптимальнее и правильнее?
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 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);
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
12.02.2016, 11:45  [ТС]     Генерация цветовых экранов #22
Вместо цифр посылать цвета не совсем так, потому что начальная последовательность будет задаваться не жёстко. То есть входной параметр программы будет задаваться в виде семи чисел (он может быть 1234567 или 1342567 и т.д.), и относительно того, как будут располагаться числа во входной последовательности, будет формироваться матрица а соответственно и порядок выведения цветов на экран.
Каким образом генерируются цвета на экран- согласно сформированной матрицы.
Например, если матрица
1234567
1234576
....
то при запуске на экране появится красный цвет(цифра 1), потом оранжевый(цифра 2) и т.д....до конца первой строчки матрицы. Потом читается вторая строчка матрицы- то есть опять красный(1)...фиолетовый(7),синий(6)....и т.д. до конца матрицы
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 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 - то число, которое сейчас помещается в этот массив.
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
12.02.2016, 12:15  [ТС]     Генерация цветовых экранов #24
Не совсем понятны последние 2 поста, в частности почему blinking 13-14, 17-19 строчки почти не содержат данных.
и хотел узнать, а куда мой код тут вставить?
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.02.2016, 12:45     Генерация цветовых экранов #25
Цитата Сообщение от Pir12345 Посмотреть сообщение
почему blinking 13-14, 17-19 строчки почти не содержат данных.
Это конструкторы, в данном случае дефолтные, все операции в супер классе происходят.
Цитата Сообщение от Pir12345 Посмотреть сообщение
куда мой код тут вставить?
Никуда, просто получаете свой массив цветов и вызываете startBlinking у BlinkingView. Его предварительно нужно добавить в разметку. Если не знаете как лучше почитать уроки тут.
Pir12345
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 276
12.02.2016, 13:37  [ТС]     Генерация цветовых экранов #26
А если BlinkingView не оспользовать, а сделать так, чтобы при нажатии кнопки запуска, мигание началось на весь экран(ну то есть всё меню "гасится" и появляется очередной цвет на весь экран). Так возможно? (яркий пример- приложение фонарик- сирена. Только в нем 2 цвета, а тут будет 7)
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.02.2016, 13:38     Генерация цветовых экранов #27
Pir12345, ну можно растянуть эту вьюшку на весь экран, можно у любой стандартной вьюшки менять бекграунд как выше советовали. Вариантов очень много, советую почитать уроки по ссылке выше.
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,222
Завершенные тесты: 1
12.02.2016, 15:52     Генерация цветовых экранов #28
в чем прикол рисовать onDraw-ом вместо одной строчки setBackgroundColor ?
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.02.2016, 16:02     Генерация цветовых экранов #29
Цитата Сообщение от Паблито Посмотреть сообщение
в чем прикол рисовать onDraw-ом вместо одной строчки setBackgroundColor ?
Да особо разницы то нет конечно, да и там одна строчка по идее. Чет я привык если можно все рисовать на канвасе, может и плохо это, но мне нравится) А кастомный класс всяко удобнее чем воротить все в той же активити.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2016, 16:08     Генерация цветовых экранов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Паблито
12.02.2016, 16:08     Генерация цветовых экранов
  #30

Не по теме:

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

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

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