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

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

Войти
Регистрация
Восстановить пароль
 
Nattali
9 / 9 / 0
Регистрация: 11.12.2012
Сообщений: 55
#1

OnTouchEvent - нарисовать точку - Android

20.11.2015, 20:08. Просмотров 272. Ответов 4
Метки нет (Все метки)

Здравствуйте! Уже который час мучаюсь с программой. В том месте где пользователь прикасается к экрану нужно нарисовать точку (Circle). Выдает ошибку - java.lang.NullPointerException

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
private PaintPointTouch pointCircle = new PaintPointTouch(); 
 
...
public boolean onTouchEvent(MotionEvent event){
        if(event.getAction() == MotionEvent.ACTION_DOWN){ 
            touchX =(float) event.getX();
            touchY = (float) event.getY();  
            pointCircle.onPaintPoint(touchX, touchX);  // вызываем из другого класса
        }
        return true;
     }
 
 
// тот самый другой класс
 
public class PaintPointTouch{
    private Canvas mCanvas;
    
    public void onPaintPoint (float touchX, float touchY){
        Paint  paintPoint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paintPoint.setStrokeWidth(2);
        paintPoint.setColor(Color.MAGENTA);
        mCanvas.drawCircle(touchX, touchY, 2, paintPoint);  //Здесь ОШИБКА
    }   
        
}
Может я вообще делаю что-то невероятно глупое, тогда подскажите пожалуйста как сделать правильно. Заранее благодарю за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2015, 20:08     OnTouchEvent - нарисовать точку
Посмотрите здесь:

Android onTouchEvent в потоке
Android Нарисовать график на виджете
Обработка onTouchEvent в Activity Android
Android Не срабатывает onTouchEvent
Нарисовать линию Android
Разгрузка onTouchEvent Android
Как нарисовать точку в месте долгого нажатия? Android
Нарисовать на карте Android
Android Warning: Custom view overrides onTouchEvent but not performClick
Android Нарисовать линию градиентом
String.format("%.2f", var). запятую в точку Android
Android нарисовать многоугольник

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2064 / 1806 / 562
Регистрация: 12.05.2014
Сообщений: 6,432
Завершенные тесты: 1
20.11.2015, 20:26     OnTouchEvent - нарисовать точку #2
переменная mCanvas объявлена, а чему она равна, где присвоение?
Nattali
9 / 9 / 0
Регистрация: 11.12.2012
Сообщений: 55
20.11.2015, 23:27  [ТС]     OnTouchEvent - нарисовать точку #3
Паблито, спасибо! я кажется начинаю понимать... но не до конца наверное. Сделала вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class PaintPointTouch{
    private Canvas mCanvas;
    
    public void onPaintPoint (float touchX, float touchY){
        mCanvas = new Canvas();
        Paint  paintPoint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paintPoint.setStrokeWidth(2);
        paintPoint.setColor(Color.MAGENTA);
        mCanvas.drawCircle(touchX, touchY, 2, paintPoint);
    }   
        
}
Теперь ошибки нету, программа работает. Но точки оно не рисует, как бы игнорирует нажатия((
Первый раз работаю с Canvas.
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
21.11.2015, 07:35     OnTouchEvent - нарисовать точку #4
падажжите... а у Вас, это чей канвас? (стихами заговорил чесслово)
смотрю в код, вроде правильно все, но это должно быть где-то в onDraw.
который, как раз, и получает на вход канвас элемента, по которому Вы хотите рисовать.

попробуйте в гугле например такую очень странную фразу "android how to draw by finger".
http://creative-punch.net/2014/03/ma...g-app-android/
http://androidrises.blogspot.ru/2012...ger-touch.html
http://www.java2s.com/Code/Android/U...ngertodraw.htm
https://www.youtube.com/watch?v=fRtytvw3yvY
http://stackoverflow.com/questions/1...finger-android
http://stackoverflow.com/questions/8...ng-your-finger
Nattali
9 / 9 / 0
Регистрация: 11.12.2012
Сообщений: 55
21.11.2015, 14:35  [ТС]     OnTouchEvent - нарисовать точку #5
Спасибо за ссылки, я внимательно почитала... Но странно как-то все в одном классе. У меня по мимо этого еще есть рисунки на канве. Вообщем впихнула все в один класс, использовала Path как в примерах, но это не помогло. Мои точки рисует, а на прикосновение не реагирует.

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
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new DrawView(this));
        
        parameters = new Parameters();
                Display display = getWindowManager().getDefaultDisplay();
        
        DisplayMetrics metricsB = new DisplayMetrics();
        display.getMetrics(metricsB);
        
        displayHeight = metricsB.heightPixels;
        displayWidth = metricsB.widthPixels;
        
    }
    
    class DrawView extends View{
    
        float TouchX, TouchY;
        Paint p;
        Path path;
        Paint paintPoint;
        Path mPath;
 
        public DrawView(Context context) {
          super(context);
          p = new Paint(Paint.ANTI_ALIAS_FLAG);
          p.setStrokeWidth(2);
          path = new Path();
          paintPoint = new Paint(Paint.ANTI_ALIAS_FLAG);
          mPath = new Path();
        }
        
        @Override
        protected void onDraw(Canvas canvas) {
          canvas.drawARGB(80, 102, 204, 255);
 
          p.setStyle(Paint.Style.FILL);
          p.setColor(Color.WHITE);
          for (int i=20; i<=140; i+=20){
              canvas.drawCircle(i,  displayHeight-80, 2, p);
          }  
          
          for (int i=100; i<=280; i+=20){
              canvas.drawCircle(20,  displayHeight-i, 2, p);
          }  
          
            paintPoint.setStrokeWidth(2);
            paintPoint.setColor(Color.MAGENTA);
            canvas.drawPath(mPath, paintPoint);
        }
        
       @Override
        public  boolean onTouchEvent(MotionEvent event){
            if(event.getAction() == MotionEvent.ACTION_DOWN){ 
                TouchX = (float) event.getX() ;
                TouchY =(float) event.getY() ;
                mPath.moveTo(TouchX, TouchY);
                mPath.lineTo(TouchX, TouchY);
                invalidate();
            }
            return true;
         }
    }
Добавлено через 26 минут
Ура! Наконец-то это работает! Все получилось проще чем ожидалось. Спасибо за подсказки! Вот ответ, может кому-то еще пригодится
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
             protected void onDraw(Canvas canvas) {
          canvas.drawARGB(80, 102, 204, 255);
                    paintPoint.setStrokeWidth(2);
            paintPoint.setColor(Color.MAGENTA);
            canvas.drawCircle(TouchX, TouchY, 2, paintPoint);
        }
        
       @Override
        public  boolean onTouchEvent(MotionEvent event){
            if(event.getAction() == MotionEvent.ACTION_DOWN){ 
                TouchX = (float) event.getX() ;
                TouchY =(float) event.getY() ;
                invalidate();
            }
            return true;
         }
Yandex
Объявления
21.11.2015, 14:35     OnTouchEvent - нарисовать точку
Ответ Создать тему
Опции темы

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