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

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

23.12.2012, 16:05. Показов 1528. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru