Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
ProGraf
0 / 0 / 0
Регистрация: 27.06.2015
Сообщений: 96
#1

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

31.05.2016, 19:23. Просмотров 501. Ответов 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
Подскажите, как реализовать отображение, например, карандашика, когда рисуешь...

SurfaceView Canvas нужно ли хранить все отрисовываемые объекты?
Здравствуйте! Вот код моего активити: public class CanvasActivity extends...

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

Мерцание в SurfaceView
Всем привет! Рисую на SurfaceView фон и на нем анимированные объекты. Кадры...

Восстановление SurfaceView
Кто работал с SurfaceView, помогите! Рисую на SurfaceView с помощью...

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

3
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
01.06.2016, 08:26 #2
Лучший ответ Сообщение было отмечено ProGraf как решение

Решение

не знаю в этом ли причина, проверьте, в экшн даун вы всегда создаете новый 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
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
01.06.2016, 10:55 #4
не за что. удачи
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2016, 10:55
Привет! Вот еще темы с решениями:

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

Работа с SurfaceView
Отрисовка в SurfaceView никогда не вызывала трудностей, до тех пор, пока не...

Воспроизведение видео в SurfaceView
Ребят прощу у вас помощи, возникла такая проблема необходимо воспроизвести...

Обработка касаний в SurfaceView
Всем привет! Для обработки касаний в surfaceview определяю OnTouchEvent () но...


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

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

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