Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

31.05.2016, 19:23. Просмотров 353. Ответов 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 минут
Прям никто не знает?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2016, 19:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Canvas, SurfaceView, Touch (Программирование Android):

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

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

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

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

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

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

3
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
01.06.2016, 08:26 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
не знаю в этом ли причина, проверьте, в экшн даун вы всегда создаете новый path, 46 строка,попробуйте эту строку вынести в констрактор

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

Добавлено через 3 минуты
shavuz, спасибо, помогло, Path вынес, просто блеск, спасибо!
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
01.06.2016, 10:55 #4
не за что. удачи
0
01.06.2016, 10:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2016, 10:55
Привет! Вот еще темы с ответами:

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

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

SurfaceView сворачивание программы - Программирование Android
@Override protected void onDraw(Canvas canvas){ //рисует игровое поле super.onDraw(canvas); Paint paint = new Paint();...

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


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

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

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