Форум программистов, компьютерный форум 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)); calendar.set(Calendar.MINUTE, calendar.getMinimum(Calendar.MINUTE)); calendar.set(Calendar.SECOND, calendar.getMinimum(Calendar.SECOND)); return calendar.getTimeInMillis(); }
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()) + " " + String.valueOf(c1.getTimeInMillis())); который возвратил мне строку: Mon Oct 27 12:20:40 GMT+05:00 2014 1414390840280 1414390840280 - количество миллисекунд = ‎27‎.‎10‎.‎2014‎ ‎11‎:‎20‎:‎40 и получается что Mon...
Android Ошибка отображения http://www.cyberforum.ru/android-dev/thread1285434.html
Добрый день, столкнулся с проблемой. Не отображаются корректно элементы при редактировании фронтенда. Уже нагуглио, что надо сменить версию API с W. Но у меня только она, как мне загрузить/подключить другие? Спасибо за помощь.
Android Одинаковые названия id для 2х кнопок Пишу приложение и там есть 2 xml файла,что то типа диалога,там я ввожу данные элемента которого хочу добавить в БД,так вот у меня на каждом из этих 2 xml файлов есть по кнопке Ok и Cancel, назвал id я на каждой кнопке btnOK и btnCancel,подскажите,пожалуйста,можно ли как то прописать чтоб я обращался к id конкретного xml файла,а то если через R.id обращаться ,то он 1е попавшееся значение берет ? подробнее

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

Обработка событий + прорисовка - Android

27.10.2014, 16:39. Просмотров 490. Ответов 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);
 
            }
        }
Пробовал в интернете искать, но честно говоря не особо представляю в каком направлении искать. С кодом все в порядке никаких ошибок нет, но при запуске на эмуляторе объект который должен двигаться никак на движение не реагирует при этом все остальное работает нормально, меню кнопки переходы между активити.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru