Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
PinkPink
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 289
1

Перерисовка

30.12.2013, 11:22. Просмотров 1293. Ответов 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)//здесь можно ничего не писать  
    {
        
    }
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 11:22
Ответы с готовыми решениями:

Перерисовка картинки
Нужно перерисовывать секундную стрелку часов. Запихнул всё в timetask и...

Перерисовка layout
здравствуйте,может кто сталкивался с такой проблемой имею такой xml ...

OnTouchListener и Canvas . Рисование и перерисовка при перемещении
Почти получилось то чего я хотел, но есть один недочёт который не могу понять....

Перерисовка
Здравствуйте! У меня снова глючит перерисовка( Описывать всё, что есть долго -...

Перерисовка
Рисую на PainBox средствами GDI+. Но вот возникает такая проблема: при нажатии...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2013, 11:22

Перерисовка
подскажите как можно сделать такое(что-то не могу сообразить): нужно чтобы в...

Перерисовка
Здравствуйте! Хочу в одном из методов реализовать перерисовку , прочитал , что...

Перерисовка
Кусок чужого кода. В чём ошибка? Как-то оно странно перерисовывается.(При...


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

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

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