Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для MegaSinner
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746

Android. Как прорисовать что-нибудь в SurfaceView используя canvas?

23.12.2012, 16:05. Показов 1484. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решения на подобии http://stackoverflow.com/quest... emory-leak не рассматриваются поскольку во-первых такой метод жрет CPU, во-вторых я не смогу добавить кнопки или еще что-то, и в третьих я не смогу переключится на другой layout так как от этого TouchEvent'ы перестанут работать.
Вот мой код:
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
public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    Button btn;
    SurfaceView sv;
    Canvas canvas = null;
    SurfaceHolder mHolder;
    Paint mPaint;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.button1);
        sv =  (SurfaceView)findViewById(R.id.surfaceView1);
        sv.setOnTouchListener( new SurfaceView.OnTouchListener(){
            private boolean moving = false;//stupid state
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch( event.getAction() ){
                    case MotionEvent.ACTION_DOWN:
                        final int x = (int)event.getX();
                        final int y = (int)event.getY();
                        mPaint = new Paint();
                        mPaint.setColor(Color.WHITE);
                        try{
                        canvas.drawText("some text", 50, 50, mPaint);
                        }catch (Exception xx)
                        {
                            xx.toString();
                        }
                        return true;
                    case MotionEvent.ACTION_MOVE:
                        if( moving ){
                            final int x_new = (int)event.getX();
                            final int y_new = (int)event.getY();
                        return true;
                    case MotionEvent.ACTION_UP:
                        moving = false;
                        return true;
                }
                return false;
            }
        });
    }
@Override
protected void onPause()
{
    mHolder = sv.getHolder();
    Canvas canvas = null;
    canvas = mHolder.lockCanvas();
}
public  void Click(View view)
{
    switch (view.getId()) {
 
        case R.id.button1:
            mPaint = new Paint();
            mPaint.setColor(Color.WHITE);
            mHolder = sv.getHolder();
            canvas = null;
            canvas = mHolder.lockCanvas();
            try{
                canvas.drawText("some text", 100, 100, mPaint);
            }catch (Exception xx)
            {
                xx.toString();
            }
            //do your button 1 work here
            break;
        case R.id.cancel:
            setContentView(R.layout.main);
            //do your button 2 work here
            break;
    }
}
}
1) Функция onPause не вызывается вообще, но как пишется в доках - должна after Activity run.
2) При первом нажатии кнопки, canvas != null, но после 'canvas.drawText' выполнение программы уходит в никуда. При повторном нажатии canvas = null.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.12.2012, 16:05
Ответы с готовыми решениями:

Как вывести хоть что-нибудь из БД используя MVC?
Изучаю МVC на примере самописного движка. Реализовал роутинг, создал БД, Прописал основной контроллер и тройку его потомков, основную...

Canvas, SurfaceView, Touch
Всем добра. Возник один баг (может в коде проблема), который неприятно выглядит в приложении. Рисуя с помощью SurfaceView, Canvas...

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

1
 Аватар для MegaSinner
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
24.12.2012, 22:08  [ТС]
Чо, никто не знает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2012, 22:08
Помогаю со студенческими работами здесь

Объясните принцип работы Canvas в классе SurfaceView
Добрый день, форумчане. У меня возникла проблема в реализации простой задачи. она состоит в следующем: при нажатии на экран на нем...

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

Используя DrawLines и цикл прорисовать линии по массиву координат
прогоняю только по счётчику i потому что если ещё использую счётчик j то происходит ошибка выхода за пределы массива. а в даННом варианте...

Как масштабировать нарисованное на холсте по размеру экрана? android.graphics.Canvas
Здравствуйте. Помогите, пожалуйста, разобраться. Изучаю рисование на андроид. Допустим, я что-то нарисовал, а нарисованное вышло за пределы...

Как создать новый класс используя Canvas?
Мне нужен класс типа list, только с другим интерфейсом. Я хочу, чтоб элементы списка при выделении не светились в синем фоне, а просто...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru