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

Обработка событий + прорисовка - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Что случилось с датой? http://www.cyberforum.ru/android-dev/thread1285597.html
Есть функция: public long getCVMillis() { Calendar calendar = new GregorianCalendar(Locale.getDefault()); calendar.set(Calendar.HOUR_OF_DAY, calendar.getMinimum(Calendar.HOUR_OF_DAY));...
Программирование Android Подскажите среду разаработки для Android В Eclipse мне не нравиться дизайн окна, как для начала. Подскажите другие хорошие среды разработки под Android. http://www.cyberforum.ru/android-dev/thread1285544.html
Программирование Android SetExact()
Здравсвуйте! Я использую метод setExact класса AlarmManager , который рассчитан для для 19 API +. Я тестирую на 21 API в стандартном эмуляторе Eclipse. Но этот метод "setExact", работает только тогда...
Программирование Android Как получить дату и время в связи с переходом?
Добрый день! Пишу код Calendar c1 = Calendar.getInstance(Locale.getDefault()); c1.setTimeInMillis(cvCalendar.getDate()); Log.d("123", String.valueOf(c1.getTime()) + " " +...
Программирование Android Ошибка отображения http://www.cyberforum.ru/android-dev/thread1285434.html
Добрый день, столкнулся с проблемой. Не отображаются корректно элементы при редактировании фронтенда. Уже нагуглио, что надо сменить версию API с W. Но у меня только она, как мне...
Программирование Android Одинаковые названия id для 2х кнопок Пишу приложение и там есть 2 xml файла,что то типа диалога,там я ввожу данные элемента которого хочу добавить в БД,так вот у меня на каждом из этих 2 xml файлов есть по кнопке Ok и Cancel, назвал id... подробнее

Показать сообщение отдельно
1ые
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98

Обработка событий + прорисовка - Программирование Android

27.10.2014, 16:39. Просмотров 546. Ответов 2
Метки (Все метки)

Доброго времени суток, создаю свое первое приложение на Android. У меня есть прорисовка в отдельном потоке и обработка событий, проблемма в том что в debugе все работает как надо, а при запуске на эмуляторе в обычном режиме срабатывает только первый раз.

Кода достаточно много так что привожу только ту часть которая отвечает за обработку событий и прорисовку

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
@Override
    public boolean onTouchEvent(MotionEvent event)
    {
        int action = event.getAction();
        int count  = event.getHistorySize();
        int step  = 0;
        int oldX = 0;
        int oldY = 0;
        if ((action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE) && count != 0)
        {
            oldX = (int) event.getHistoricalX(0);
            oldY = (int) event.getHistoricalY(0);
            for(int i =0; i < count;    i++)
            {
                curx = (int)event.getHistoricalX(i);
                cury =  (int)event.getHistoricalY(i);
                boolean var = Math.abs(curx-oldX) > Math.abs(cury-oldY);
                if(var == true) {
                    if (curx < oldX) {
                        if (cur_direction == direction.LEFT)
                            step += oldX - curx;
                        else
                            step = oldX - curx;
                        while (step > 100) {
                            dir.offer(direction.LEFT);/*dir это список где я храню последовательность шагов*/
                            step -= 100;
                        }
                        cur_direction = direction.LEFT;
                    } else if (curx > oldX) {
                        if (cur_direction == direction.RIGHT)
                            step += curx - oldX;
                        else
                            step = curx - oldX;
                        while (step > 100) {
                            dir.offer(direction.RIGHT);
                            step -= 100;
                        }
                        cur_direction = direction.RIGHT;
                    }
                }else
                    {
                        if (cury < oldY)
                        {
                            if (cur_direction == direction.UP)
                                step += oldY-cury;
                            else
                                step = oldY-cury;
                            while (step > 100) {
                                dir.offer(direction.UP);
                                step-=100;
                            }
                            cur_direction = direction.UP;
                        }
                        else if (cury >  oldY){
                            if (cur_direction == direction.DOWN)
                                step += cury-oldY;
                            else
                                step = cury-oldY;
                            while(step > 100) {
                                dir.offer(direction.DOWN);
                                step-=100;
                            }
                            cur_direction = direction.DOWN;
                        }
                    }
                oldX = curx;
                oldY = cury;
            }
        }
        return true;
    }
Вот прорисовка.
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
111
112
113
public class SurfaceClass extends SurfaceView implements Runnable
    {
        Thread mythread = null;
        final SurfaceHolder holder = getHolder();
        Canvas c;
}
public SurfaceClass(Context context)
        {
            super(context);
            running = false;
        }
 
        public void pause()
        {
            running = false;
            boolean var= true;
            while(var)
            {
                try {
                    mythread.join();
                    var = false;
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        public void resume()
        {
            mythread = new Thread(this);
            running = true;
            mythread.start();
 
        }
        public void run()
        {
            while(running) {
                if (!holder.getSurface().isValid())
                    continue;
                c = holder.lockCanvas();
                c.drawColor(Color.BLACK);
                h = c.getHeight()/koly;
                w = c.getWidth()/kolx;
                p.setColor(Color.BLACK);
                c.drawRect(0,0,c.getWidth(),c.getHeight(),p);
                p.setColor(Color.GREEN);
                for(int i = 0; i < koly;i++)
                    for(int j = 0; j < kolx;j++)
                    {
                        if(!G.Versh[i*kolx+j].contains(i*kolx+j+1))
                            c.drawLine((j+1)*w, i*h, (j+1)*w, (i+1)*h,p);
                        if(!G.Versh[i*kolx+j].contains((i+1)*kolx+j))
                            c.drawLine(j*w, (i+1)*h, (j+1)*w, (i+1)*h,p);
                    }
                if(!dir.isEmpty())/*Вот тут прорисовка объекта который должен реагировать на движение*/
                {
                    switch (dir.poll())
                    {
                        case LEFT:
                        {
                            if(Player_x> 0 && G.Versh[Player_y*kolx+Player_x].contains(Player_y*kolx+Player_x-1)) {
                                for (int i = 0; i < w; i++) {
                                    drawplayer((Player_x*w+w/2) - i, Player_y*h+h/2);
                                }
                                Player_x-=1;
                            }
                            else
                                drawplayer(Player_x*w+w/2,Player_y*h+h/2);
                        }
                        break;
                        case RIGHT:
                        {
                            if(Player_x < kolx-1 && G.Versh[Player_y*kolx+Player_x].contains(kolx*Player_y+Player_x+1)) {
                                for (int i = 0; i < w; i++) {
                                    drawplayer((Player_x*w+w/2) + i, Player_y*h+h/2);
                                }
                                Player_x+=1;
                            }
                            else
                                drawplayer(Player_x*w+w/2,Player_y*h+h/2);
                        }
                        break;
                        case UP:
                        {
                            if(Player_y > 0 && G.Versh[Player_y*kolx+Player_x].contains((Player_y-1)*kolx+Player_x)) {
                                for (int i = 0; i < h; i++) {
                                    drawplayer(Player_x*w+w/2, (Player_y*h+h/2)-i);
                                }
                                Player_y-=1;
                            }
                            else
                                drawplayer(Player_x*w+w/2,Player_y*h+h/2);
                        }
                        break;
                        case DOWN:
                        {
                            if(Player_y < koly-1 && G.Versh[Player_y*kolx+Player_x].contains((Player_y+1)*kolx+Player_x)) {
                                for (int i = 0; i < h; i++) {
                                    drawplayer(Player_x*w+w/2, (Player_y*h+h/2)+i);
                                }
                                Player_y+=1;
                            }else
                                drawplayer(Player_x*w+w/2,Player_y*h+h/2);
                        }
                    }
                }
                else
                    drawplayer(Player_x*w+w/2,Player_y*h+h/2);
                /*draw_Out();*/
                holder.unlockCanvasAndPost(c);
 
            }
        }
Пробовал в интернете искать, но честно говоря не особо представляю в каком направлении искать. С кодом все в порядке никаких ошибок нет, но при запуске на эмуляторе объект который должен двигаться никак на движение не реагирует при этом все остальное работает нормально, меню кнопки переходы между активити.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru