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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
PinkPink
9 / 9 / 2
Регистрация: 10.05.2012
Сообщений: 279
#1

Перерисовка - Android

30.12.2013, 11:22. Просмотров 1075. Ответов 0
Метки нет (Все метки)

Добрый день.

Помогите пожалуйста разобраться. Не могу понять почему тормозит перерисовка изображения.
Рисуется шарик, который должен двигаться по экрану в зависимости от того как вы наклоняете телефон. Почему-то после каждого наклона изображение задерживается где-то на секунду и только потом шарик начинает перемещаться.

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.example.forlgball;
 
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
 
public class MainLG extends Activity implements SensorEventListener {
 
 
    private SensorManager mSensorManager; //менеджер сенсоров
    private Sensor mOrientation;    //датчик положения
    private draw d;
    
    private void mainProcessing() {
        Thread thread = new Thread(null, doBackgroundThreadProcessing,
                "Background");
        thread.start();
    }
    private Runnable doBackgroundThreadProcessing = new Runnable() {
        public void run() {
            backgroundThreadProcessing();
        }
    };
    
    private void backgroundThreadProcessing() {
        do{d.invalidate();}while(true);
        
    }
    
    
    public class draw extends View
    {
        int x=0;
        int y=0;
        int cx =160;
        int cy =240;
        public draw(Context context)
        {
            super(context);
        }  
        
        public void set(float _x, float _y)
        {          
           x = (int) _x;
           y = (int) _y;
        }
        int count=0;
        @Override
        protected void onDraw(Canvas canvas)
        {
            if( x<0)
            {
                if(cx<300)cx=cx+5;
            }
            else 
            {
                if(cx>20)cx=cx-5;
            }
            if( y>0)
            {
                if(cy>20)cy=cy-5;
            }
            else
            {
                if(cy<440)cy=cy+5;
            }
            super.onDraw(canvas);
            Paint paint = new Paint();
            paint.setStyle(Paint.Style.FILL);
 
            // закрашиваем холст белым цветом
            paint.setColor(Color.GRAY);
            canvas.drawPaint(paint);
            
            // Рисуем круг
            paint.setAntiAlias(true);
            paint.setColor(Color.MAGENTA);
            canvas.drawCircle(cx, cy, 15, paint);
                
            while(count!=1000)//цикл для плавной отрисовки
            {
                this.invalidate();//перерисовываем
                count++;
                if(count==1000)
                {
                    count=0;
                    break;
                }
            }
        }
    }
 
 
    @SuppressWarnings("deprecation")
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        // без заголовка
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        d = new draw(this);//создаем холст
        setContentView(d);//и устанавливаем его
        
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // Получаем менеджер сенсоров
        mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); // Получаем датчик положения
        mSensorManager.registerListener(this, mOrientation,SensorManager.SENSOR_DELAY_NORMAL);
        
    }
    
    
    public void onSensorChanged(SensorEvent event)//вызывается при изменении наклона телефона
    {
        //Нужны плоскость XZ и ZY
        d.set(event.values[2], event.values[1]);//устнавливаем значение наклона
        //d.invalidate();//вызываем перерисовку
    }
 
    
    public void onAccuracyChanged(Sensor arg0, int arg1)//здесь можно ничего не писать  
    {
        
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 11:22     Перерисовка
Посмотрите здесь:

Перерисовка C#
C++/CLI WinForms Перерисовка окна
Delphi Перерисовка
Перерисовка Java SE
C++ WinAPI Перерисовка окна
Перерисовка JavaFX
C++ WinAPI Перерисовка динамики
Android Перерисовка layout
C++ WinAPI Перерисовка окна
Android Перерисовка картинки
Перерисовка C++ Qt
C++ Qt Перерисовка QLabel

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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