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

Рисование на canvas - подтормаживание - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Способ обработки и вывода данных http://www.cyberforum.ru/android-dev/thread1530650.html
Я как всегда парсю xml данные :D Все бы ничего, но тут нашел очень критическую проблему: при запуске activity с парсером все работает отлично, а вот если layout-файл этого activity вставить в главное...
Программирование Android List.clear List.clear - 1й раз слышу - не работает почему -то http://www.cyberforum.ru/android-dev/thread1530584.html
Телефон на базе Android попал в недобросовестные руки. Что делать? Программирование Android
Дорогие ребята, извините, что вклиниваюсь в проф.беседы, но вся надежда на вас! Есть основания полагать, что мой смартфон HTC на время попал в недобросовестные руки. Телефон был включен, пароль...
Программирование Android Получение и обработка данных с сайта
Приветствую. Планирую написать програмку для смартфона, которая должна просто получать и отображать данные, но пока что не пойму,как лучше сделать. Точнее как оптимальнее построить, что бы не...
Программирование Android Navigation Drawer http://www.cyberforum.ru/android-dev/thread1530296.html
Всем Добра. Заранее прошу прощения если мой вопрос покажется тривиальным. Я пока новичок. При разработке приложение столкнулся с проблемой. Я создал navigation drawer, в нем список меню который...
Программирование Android Хранение и кэширование новостей Доброе утро, сабж: В какой контейнер следует подгружать новости ( обычного string не хватит ) и кэшировать ли их в preferences или есть более подходящий вариант ? В БД новости разбиты на несколько... подробнее

Показать сообщение отдельно
tronuo
4 / 3 / 0
Регистрация: 06.06.2011
Сообщений: 79

Рисование на canvas - подтормаживание - Программирование Android

14.09.2015, 21:22. Просмотров 628. Ответов 5
Метки (Все метки)

MainActivity.java
Java
1
2
3
4
5
6
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(new GameView(this));
    }
GameView.java
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
114
public class GameView extends SurfaceView
{
    private GameThread mThread;
    int touchX = 0;
    int touchY = 0;
    int coordX = 0;
    int coordY = 600;
    int _coordX = 0;
    int X = 0;
    int Y = 0;
    private boolean running = false;
 
 
    public class GameThread extends Thread
    {
        private GameView view;
 
        public GameThread(GameView view)
        {
            this.view = view;
        }
 
        public void setRunning(boolean run)
        {
            running = run;
        }
 
        public void run()
        {
            while (running)
            {
                Canvas canvas = null;
                try
                {
                    canvas = view.getHolder().lockCanvas();
                    synchronized (view.getHolder())
                    {
                        onDraw(canvas);
                    }
                }
                catch (Exception e) { }
                finally
                {
                    if (canvas != null)
                    {
                        view.getHolder().unlockCanvasAndPost(canvas);
                    }
                }
            }
        }
    }
 
 
    public GameView(Context context)
    {
        super(context);
 
        mThread = new GameThread(this);
 
        getHolder().addCallback(new SurfaceHolder.Callback() {
            public void surfaceDestroyed(SurfaceHolder holder) {
                boolean retry = true;
                mThread.setRunning(false);
                while (retry) {
                    try {
                        mThread.join();
                        retry = false;
                    } catch (InterruptedException e) {
                    }
                }
            }
 
            public void surfaceCreated(SurfaceHolder holder) {
                mThread.setRunning(true);
                mThread.start();
            }
 
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            }
        });
    }
    public boolean onTouchEvent(MotionEvent event)
{
    if(event.getAction() == MotionEvent.ACTION_DOWN)
    {
            _coordX = coordX;
            X = (int) event.getX();
            Y = (int) event.getY();
 
    }
    if(event.getAction() == MotionEvent.ACTION_MOVE)
    {
        touchX = ((int) event.getX());
        touchY = (int) event.getY();
        if (Math.abs(touchX - X) > 10){
            coordX = _coordX + (touchX - X);
            invalidate();
 
        }
    }
    if(event.getAction() == MotionEvent.ACTION_UP)
    {
        _coordX = coordX;
        Y = touchY;
    }
    return true;
}
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fon), 0, 0, null);
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.player0000), coordX, coordY, null);
 
    }
}
При перемещении "player0000" по экрану, он тормозит. Хотелось бы узнать почему. Спасибо заранее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru