Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Vladimir99
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 22
1

Постепенное растворение фона

31.05.2015, 12:51. Просмотров 809. Ответов 6
Метки нет (Все метки)

У меня не получается постепенно растворять цвет.В программе указал увеличение цвета на 10, используя массив color1[i],color2[i] и color3[i] через таймер CountDownTimer.Но цвета меняются бесконечно от черного к белому и наоборот
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.example.android19anim1;
 
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.CountDownTimer;
import android.view.View;
 
public class MyDraw extends View {
    static int n = 5;
    static boolean started;
    int[] x = new int[n];
    int[] y = new int[n];
    int[] vx = new int[n];
    int[] vy = new int[n];
    int[] color1 = new int[n];
    int[] color2 = new int[n];
    int[] color3 = new int[n];
 
    int random(int min, int max) {
        return (int) (min + Math.random() * (max + 1));
    }
 
    void fillArrayRandom(int[] a, int min, int max) {
        for (int i = 0; i < a.length; i++) {
            a[i] = random(min, max);
        }
    }
 
    void makeBalls() {
        fillArrayRandom(x, 0, this.getWidth());
        fillArrayRandom(y, 0, this.getHeight());
        fillArrayRandom(vx, -10, 50);
        fillArrayRandom(vy, -10, 50);
        fillArrayRandom(color1, 0, 255);
        fillArrayRandom(color2, 0, 255);
        fillArrayRandom(color3, 0, 255);
    }
 
    void moveBalls() {
        for (int i = 0; i < n; i++) {
            if ((x[i] < 0) || (x[i] > this.getWidth())) {
                vx[i] = -vx[i];
            }
            if ((y[i] < 0) || (y[i] > this.getHeight())) {
                vy[i] = -vy[i];
            }
            x[i] += vx[i];
            y[i] += vy[i];
            color1[i]+=5;
            color2[i]+=5;
            color3[i]+=5;
        }
    }
 
    public MyDraw(Context context) {
        super(context);
        MyTimer timer = new MyTimer();
        timer.start();
    }
 
    protected void onDraw(Canvas canvas) {
        if (!started) {
            makeBalls();
            started = true;
        }
        Paint paint = new Paint();
        for (int i = 0; i < n; i++) {
            canvas.drawCircle(x[i], y[i], 20, paint);
            paint.setColor(Color.rgb(color1[i], color2[i], color3[i]));
        }
 
    }
 
    void nextFrame() {
        moveBalls();
        invalidate();
    }
 
    // public static Scanner scan = new Scanner(System.in);
    //
    // public static void main(String[] args) {
    // System.out.println("Введите колличество шариков");
    // n = scan.nextInt();
    // }
 
    class MyTimer extends CountDownTimer {
 
        MyTimer() {
            super(1000000, 100);
        }
 
        @Override
        public void onTick(long millisUntilFinished) {
            nextFrame();
 
        }
 
        @Override
        public void onFinish() {
            // TODO Auto-generated method stub
 
        }
 
    }
 
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2015, 12:51
Ответы с готовыми решениями:

Растворение фона
Я сделал программу наподобие хаотичного движения газов, и мне нужно чтобы при...

ListView. Постепенное подгружение картинок
Нужно сделать скролинг из картинок, их будет 100. Как лучше заполнять элементы...

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

Установка фона кнопке
Добрый день, хочу поставить на кнопку картинку, загрузив из папки mipmap, но...

Изменение фона активности
Здравствуйте, посетители форума! Захотел поменять фон активности. Добавил в...

6
Pablito
2765 / 2197 / 743
Регистрация: 12.05.2014
Сообщений: 7,707
Завершенные тесты: 1
31.05.2015, 13:02 2
во-первых это раздел джавы, а не андроида
а во-вторых у всех вьюшек есть что-то типа setOpacity()
и у цвета можно задавать не три а четыре параметра, первым будет идти альфа-канал, то есть прозрачность
0
Vladimir99
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 22
31.05.2015, 13:31  [ТС] 3
Я поменял на это.Но какая то ошибка!После запуска спустя несколько секунд, фон резко меняется на полностью прозрачный, и идет обратный процесс..из прозрачного фон становится снова непрозрачным..в чем проблема?
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package com.example.android19anim1;
 
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.CountDownTimer;
import android.view.View;
 
public class MyDraw extends View {
    static int n = 5;
//  static int alpha;
    static boolean started;
    int[] x = new int[n];
    int[] y = new int[n];
    int[] vx = new int[n];
    int[] vy = new int[n];
    int[] color1 = new int[n];
    int[] color2 = new int[n];
    int[] color3 = new int[n];
    static int[] alpha=new int [n];
 
    int random(int min, int max) {
        return (int) (min + Math.random() * (max + 1));
    }
 
    void fillArrayRandom(int[] a, int min, int max) {
        for (int i = 0; i < a.length; i++) {
            a[i] = random(min, max);
        }
    }
 
    void makeBalls() {
        fillArrayRandom(x, 0, this.getWidth());
        fillArrayRandom(y, 0, this.getHeight());
        fillArrayRandom(vx, -10, 50);
        fillArrayRandom(vy, -10, 50);
        fillArrayRandom(color1, 0, 255);
        fillArrayRandom(color2, 0, 255);
        fillArrayRandom(color3, 0, 255);
    }
 
    void moveBalls() {
        for (int i = 0; i < n; i++) {
            if ((x[i] < 0) || (x[i] > this.getWidth())) {
                vx[i] = -vx[i];
            }
            if ((y[i] < 0) || (y[i] > this.getHeight())) {
                vy[i] = -vy[i];
            }
            x[i] += vx[i];
            y[i] += vy[i];
            alpha[i]+=5;
            }
            }
        }
    
 
    public MyDraw(Context context) {
        super(context);
        MyTimer timer = new MyTimer();
        timer.start();
    }
 
    protected void onDraw(Canvas canvas) {
        if (!started) {
            makeBalls();
            started = true;
        }
        Paint paint = new Paint();
        for (int i = 0; i < n; i++) {
            canvas.drawCircle(x[i], y[i], 20, paint);
            paint.setColor(Color.argb(alpha[i],color1[i], color2[i], color3[i]));
        }
 
    }
 
    void nextFrame() {
        moveBalls();
        invalidate();
    }
 
    // public static Scanner scan = new Scanner(System.in);
    //
    // public static void main(String[] args) {
    // System.out.println("Введите колличество шариков");
    // n = scan.nextInt();
    // }
 
    class MyTimer extends CountDownTimer {
 
        MyTimer() {
            super(1000000, 100);
        }
 
        @Override
        public void onTick(long millisUntilFinished) {
            nextFrame();
 
        }
 
        @Override
        public void onFinish() {
            // TODO Auto-generated method stub
 
        }
 
    }
 
}
И еще у меня ч
0
Pablito
2765 / 2197 / 743
Регистрация: 12.05.2014
Сообщений: 7,707
Завершенные тесты: 1
31.05.2015, 15:59 4
я код особо не читал, но n=5 и потом цикл i от 0 до i<n, то есть от 0 до 4
и какой должен быть фон с прозрачностью 4 ?
при том что 0 это полностью прозрачный, а 255 вообще не прозрачный
0
Vladimir99
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 22
31.05.2015, 16:24  [ТС] 5
n-это число шариков, а alpha[n]-это массив значений прозрачности для n-кол-ва шариков.Т.к функция moveBalls вызывается много раз, то и прозрачность уменьшается каждый раз на 5
0
Pablito
2765 / 2197 / 743
Регистрация: 12.05.2014
Сообщений: 7,707
Завершенные тесты: 1
31.05.2015, 18:27 6
Лучший ответ Сообщение было отмечено Vladimir99 как решение

Решение

получается moveBalls вызывается 10 раз в секунду
в этом методе каждый раз отрабатывает цикл 5 раз и каждый раз альфа +5 то есть за секунду 250
все логично
1
Vladimir99
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 22
31.05.2015, 21:08  [ТС] 7
Паблито, вы все верно сказали, но проблема остается.Почему процесс повторяется?
0
31.05.2015, 21:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2015, 21:08

Смена фона layout
Мне необходимо реализовать смену фона layout. Например существует два layout в...

Установка заднего фона
Здравствуйте! У меня вопрос насчёт заднего фона. Как сделать чтобы...

Установка заднего фона
Здравствуйте. Как сделать выбор заднего фона для Activity из галереи смартфона?...


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

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

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