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

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

Войти
Регистрация
Восстановить пароль
 
ProGraf
0 / 0 / 0
Регистрация: 27.06.2015
Сообщений: 94
#1

Canvas, SurfaceView, Touch - Программирование Android

31.05.2016, 19:23. Просмотров 304. Ответов 3
Метки нет (Все метки)

Всем добра.
Возник один баг (может в коде проблема), который неприятно выглядит в приложении.
Рисуя с помощью SurfaceView, Canvas выходит нормально, все идеально, но отпуская палец и начиная рисовать заново, происходит так, предыдущая линия (конец ее), начинает моргать, я не понимаю в чем проблема.
Объясню еще раз, когда пользователь рисует все нормально, а когда начинает рисовать вторую линию, у предыдущей начинать конец линии моргать.
Код: (activity)

Кликните здесь для просмотра всего текста
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
import java.util.Random;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
 
public class ScreenActivity extends Activity {
 
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
 
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(new MySurfaceView(this));
    }
 
    class MySurfaceView extends SurfaceView {
 
        Path path;
 
        Thread thread = null;
        SurfaceHolder surfaceHolder;
        volatile boolean running = false;
 
        private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        Random random;
 
        public MySurfaceView(Context context) {
            super(context);
            surfaceHolder = getHolder();
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(1);
            paint.setColor(Color.WHITE);
        }
 
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                path = new Path();
                path.moveTo(event.getX(), event.getY());
                path.lineTo(event.getX(), event.getY());
            } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
                path.lineTo(event.getX(), event.getY());
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                path.lineTo(event.getX(), event.getY());
            //  mGraphics.add(path);
            }
 
            if (path != null) {
                Canvas canvas = surfaceHolder.lockCanvas();
                canvas.drawPath(path, paint);
                surfaceHolder.unlockCanvasAndPost(canvas);
            } 
 
            return true;
        }
    }
}


Спасибо заранее.

Добавлено через 4 часа 47 минут
Прям никто не знает?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2016, 19:23     Canvas, SurfaceView, Touch
Посмотрите здесь:

SurfaceView&Canvas - Программирование Android
Подскажите, как реализовать отображение, например, карандашика, когда рисуешь на Canvas в SurfaceView. В какую сторону копать, чтобы такое...

SurfaceView Canvas нужно ли хранить все отрисовываемые объекты? - Программирование Android
Здравствуйте! Вот код моего активити: public class CanvasActivity extends Activity { @Override protected void...

Восстановление SurfaceView - Программирование Android
Кто работал с SurfaceView, помогите! Рисую на SurfaceView с помощью onTouchEvent(), без потока, все замечательно рисует, сворачиваю...

Ошибка в SurfaceView - Программирование Android
есть игра. отрисовка идет через SurfaceView и поток привязанный к нему. ошибка возникает в следующем моменте - я открываю сам игровой...

SurfaceView + onKeyDown - Программирование Android
Проблемка очень простая - не реагирует на onKeyDown в классе, наследующем SurfaceView. Исправьте мою криворукость, пожалуйста, подскажите,...

SurfaceView не отображается - Программирование Android
Учусь программировать по книге П. Дейтел, Х. Дейтел "Android для программистов. Создаём приложения". Делаю уже 5 приложение, но это не...

Работа с SurfaceView - Программирование Android
Отрисовка в SurfaceView никогда не вызывала трудностей, до тех пор, пока не запустил приложение на телефоне с экраном 1920х1080px. Фпс упал...

Мерцание в SurfaceView - Программирование Android
Всем привет! Рисую на SurfaceView фон и на нем анимированные объекты. Кадры беру из атласа. Появилось мерцание, причем фон не мерцает а...

Простейший пример SurfaceView - Программирование Android
Здравствуйте. Напишите пожалуйста простейшую программу рисующую точку на экране с помощью SurfaceView.

Camera без SurfaceView - Программирование Android
Здравствуйте. Можно ли сделать снимок с помощью класса Camera без предварительного просмотра? Например Camera.open() и потом сразу...

Воспроизведение видео в SurfaceView - Программирование Android
Ребят прощу у вас помощи, возникла такая проблема необходимо воспроизвести видео с помощью MediaPlayer(ранее использовал его для...

Вспомогательный поток в SurfaceView - Программирование Android
Правильно ли использовать дополнительный поток в SurfaceView? Т.е. допустим для обработки долгого касания экрана, удержания. В 42-й и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
shavuz
99 / 105 / 19
Регистрация: 29.01.2014
Сообщений: 527
01.06.2016, 08:26     Canvas, SurfaceView, Touch #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
не знаю в этом ли причина, проверьте, в экшн даун вы всегда создаете новый path, 46 строка,попробуйте эту строку вынести в констрактор

Добавлено через 2 минуты
то же самое с канвас в 57 строке, каждое событие вы пересоздаете канвас. его тоже в констрактор
ProGraf
0 / 0 / 0
Регистрация: 27.06.2015
Сообщений: 94
01.06.2016, 10:47  [ТС]     Canvas, SurfaceView, Touch #3
shavuz, пробую...

Добавлено через 3 минуты
shavuz, спасибо, помогло, Path вынес, просто блеск, спасибо!
shavuz
99 / 105 / 19
Регистрация: 29.01.2014
Сообщений: 527
01.06.2016, 10:55     Canvas, SurfaceView, Touch #4
не за что. удачи
Yandex
Объявления
01.06.2016, 10:55     Canvas, SurfaceView, Touch
Ответ Создать тему
Опции темы

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