Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
phpk
27 / 30 / 13
Регистрация: 15.05.2013
Сообщений: 1,152
#1

Почему Canvas не выводит текст?

12.05.2014, 15:05. Просмотров 694. Ответов 6
Метки нет (Все метки)

В коде, приведённом ниже вроде всё правильно, но не пойму, почему не выводится текст!
MainActivity.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
public class MainActivity extends Activity
{
    MySurface surface;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
 
        surface = new MySurface(this);
        setContentView(surface);
    }
 
    public class MySurface extends SurfaceView 
    implements SurfaceHolder.Callback
    {
        MyThread thread;
        SurfaceHolder holder;
 
        MySurface(Context context)
        {
            super(context);
 
            holder = getHolder();
            thread = new MyThread(holder);
 
        }
 
        @Override
        public void surfaceCreated(SurfaceHolder p1)
        {
            // TODO: Implement this method
            thread.running = true;
            thread.start();
        }
 
        @Override
        public void surfaceChanged(SurfaceHolder p1, int p2, int p3, int p4)
        {
            // TODO: Implement this method
        }
 
        @Override
        public void surfaceDestroyed(SurfaceHolder p1)
        {
            // TODO: Implement this method
            boolean retry = true;
            thread.running = false;
            while (retry)
            {
                try
                {
                    thread.join();
                    retry = false;
                }
                catch (InterruptedException e) {}
            }
        }
 
    }
}
MyThread.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
public class MyThread extends Thread
{
           boolean running;
    Paint p;
    SurfaceHolder holder;
    
    MyThread(SurfaceHolder h){
        holder = h;
        p = new Paint();
    }
 
    
    public void setRunning(boolean r){
        running = r;
    }
 
    @Override
    public void run()
    {
        // TODO: Implement this method
        p.setColor(Color.RED);
        while (running)
        {
            Canvas canv = null;
            try
            {
                
                canv = holder.lockCanvas();
                synchronized(holder){
                canv.drawText("hello",100,400,p);
                }
            }
            catch (Exception e) {}
            finally{
                holder.unlockCanvasAndPost(canv);
            }
        }
    }
    
    
}
Добавлено через 8 минут
нашёл ошибку, забыл добавить addCallback

Теперь другой вопрос.
Почему надпись "hello" появляется не сразу, а через пару секунд?
И почему при закрытии появляется ошибка "Ошибка в приложении"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2014, 15:05
Ответы с готовыми решениями:

Почему не выводит текст во вторую activity?
Суть:Из первой activity во вторую передается текст,но,когда жму "Send...

Как рисовать текст на Canvas во View?
Есть ImageView. Я делаю так: Canvas canvas; canvas = new Canvas();...

Почему не обнавляются preferences без перезапуска Activity (Canvas)
Подскажите где я что пропустила? Вот мой canvas. В самом низу переменная...

Как сделать так, чтобы вводимый текст сразу же рисовался в canvas?
Допустим, у меня в верхней части экрана EditText, а внизу область рисования. Я...

Отрисовоку выводит за ошибку почему?
проблема, должно выводится кол-во попаданий и процент и т .д но почему то...

6
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
12.05.2014, 15:15 #2
phpk, давайте стек трейс с ошибкой
0
phpk
27 / 30 / 13
Регистрация: 15.05.2013
Сообщений: 1,152
12.05.2014, 16:06  [ТС] #3
Цитата Сообщение от YuraAAA Посмотреть сообщение
phpk, давайте стек трейс с ошибкой
не сочтите за наглость, но подскажите пожалуйста, как создать этот стек трейс?
В будущем буду пользоваться, если научите.
Я знаю про Log.d(имя лога, ошибка), но куда и как надо его вставить?

Добавлено через 3 минуты
тестирую на смартфоне с помощью AIDE
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
12.05.2014, 16:18 #4
phpk, в самой IDE. Когда приложение падает на телефоне(подключённом к ПК)/эмуляторе, то в логах появляется стек трейс с ошибкой.
1
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
13.05.2014, 14:17 #5
YuraAAA, у меня эклипс иногда глючит и не показывает логи. Я в таком случае нахожу примерное место ошибки и заключаю его вот в такую конструкцию

Java
1
2
3
4
5
try {
    
} catch (IOException e) {
   Log.d(LOG_TAG, "IOException");
   e.printStackTrace();}
1
phpk
27 / 30 / 13
Регистрация: 15.05.2013
Сообщений: 1,152
14.05.2014, 19:21  [ТС] #6
Вот код, который как я говорил выдаёт ошибку после закрытия! "В приложении "MyGame" произошла ошибка"
И надпись в самом приложении "hello" появляется через секунд 3-4.
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package com.mycompany.game;
 
import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.Paint.Style;
import android.util.Log;
import android.view.View;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.View.OnTouchListener;
import android.view.MotionEvent;
import android.nfc.*;
 
public class MainActivity extends Activity
{
    MySurface surface = null;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
         
        surface = new MySurface(this);
        setContentView(surface);
    }
    
////////////////////
////////////////////
    public class MySurface extends SurfaceView 
    implements SurfaceHolder.Callback, OnTouchListener
    {
        MyThread thread = null;
        SurfaceHolder holder;
        private static final String TAG = "test";
 
        MySurface(Context context)
        {
            super(context);
            
            holder = getHolder();
            holder.addCallback(this);
            
            thread = new MyThread(holder);
            
            setOnTouchListener(this);
            
        }
 
        @Override
        public void surfaceCreated(SurfaceHolder p1)
        {
            // TODO: Implement this method
            
            try{
                thread.running = true;
                thread.start();
            }catch(Exception e){
            //  e.printStackTrace();
            }
            //Log.d(TAG,"create");
        }
 
        @Override
        public void surfaceChanged(SurfaceHolder p1, int p2, int p3, int p4)
        {
            // TODO: Implement this method
        }
 
        @Override
        public void surfaceDestroyed(SurfaceHolder p1)
        {
            // TODO: Implement this method
            boolean retry = true;
            
            thread.running = false;
            
            while (retry)
            {
                try
                {
                    thread.join();
                    retry = false;
                    Log.d(TAG,"surfacedelete");
                }
                catch (InterruptedException e)  {
                    //Log.d(TAG, e.getMessage());
                    //e.printStackTrace();
                    
                }
            }
        }
 
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            
            return false;
        }
    }
    
    /////////////////
    /////////////////
    public class MyThread extends Thread
    {
        boolean running = false;
        Paint p;
        SurfaceHolder holder;
 
        MyThread(SurfaceHolder h){
            holder = h;
            p = new Paint();
            //running = true;
            //Log.d("thread","constr");
        }
 
 
        public void setRunning(boolean r){
            running = r;
        }
 
        @Override
        public void run()
        {
            // TODO: Implement this method
            p.setColor(Color.RED);
            
            while (running)
            {
                Canvas canv = null;
                try
                {
 
                    canv = holder.lockCanvas();
                    synchronized(holder){
                        canv.drawText("hello",260,500, p);
                        
                    }
                    //  Thread.sleep(100);
                
                }catch (Exception e){}
                finally{
                    //if(canv != null)
                        holder.unlockCanvasAndPost(canv);}
                //}catch(Exception e){}
                
            }
        }
 
 
    }
    
}
а вот логи:
...
... D dalvikvm com.mycompany.game threadid=13: exiting
... W dalvikvm com.mycompany.game threadid=13: thread exiting with uncaught exception (group=0x41fb39a8)
... E AndroidRuntime dalvikvm com.mycompany.game FATAL EXCEPTION: Thread-3725
... E AndroidRuntime dalvikvm com.mycompany.game java.lang.IllegalArgumentException
... E AndroidRuntime dalvikvm com.mycompany.game at android.view.Surface.nativeUnlockCanvasAndPost(Native Method)
... E AndroidRuntime dalvikvm com.mycompany.game at android.view.Surface.unlockCanvasAndPost(Surface.java:459)
... E AndroidRuntime dalvikvm com.mycompany.game at android.view.SurfaceView$4.unlockCanvasAndPost(SurfaceView.java:859)
... E AndroidRuntime dalvikvm com.mycompany.game at com.mycompany.game.MainActivity$MyThread.run(MainActivity.java:155)


кстати, если в коде раскомментировать строку 154 , то ошибку не выдаёт!
0
phpk
27 / 30 / 13
Регистрация: 15.05.2013
Сообщений: 1,152
15.05.2014, 19:59  [ТС] #7
так подскажите почему надпись появляется не сразу, а через секунды 3-4?
Это даже если 154 строка раскомментирована!
0
15.05.2014, 19:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2014, 19:59

Не выводит текст из strings
Всем привет, задаю 2 button и 1 label свойство text из коллекции strings.xml...

Подскажите почему не выводит данные в textview из sqlite
У меня есть две активности helper и helperRec На первой есть глобальная...

Почему не выводит текст из файла (CP1251)?
Почему не выводит текст из файла (CP1251)? #include <iostream> #include...


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

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

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