Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

Как рисовать на кнопках

01.08.2013, 16:58. Показов 5433. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть кнопка на которой картинка и текст. Хочу картинку РИСОВАТЬ самому. Не сохраняя в файлы, а только для отображения - текст, линии, рамки, заливка....

Примеров по рисованию уйма, но мне нужно рисовать не на всем форме/активити, а только на маленьком кусочке (в крайнем случае на SurfaceView а не на кнопке).

Скиньте пожалуйста ПОЛНЫЙ пример подобной отрисовки - как создать сам класс-рисовалку на основе View понял. Примеров -куча:
Java
1
public class Draw2D extends View {...
Не понятно как отобразить его ТОЛЬКО на кнопке или SurfaceView.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2013, 16:58
Ответы с готовыми решениями:

Как рисовать на готовом canvas?
Друзья всем привет!! :) Недавно начал изучать canvas и всю эту тему и не могу разобраться как можно рисовать на готовом layout? ...

Как рисовать графики на Android?
Как рисовать графики на андроид?То есть,делаю калькулятор на андроид, нужно создать поле для ввода самой функции например y=x+3, после...

Как изменить текст в системных кнопках? Например, при удалении файла есть 2 кнопки ("да" и "нет"). Как текст в этих кнопках заменить на свой?
Не надо говорить, что так сделать нельзя. Сам видел программу "BazarBox". Она меняет их текст) Прошу помочь)) Прогу приложил)...

10
146 / 129 / 6
Регистрация: 29.07.2008
Сообщений: 506
01.08.2013, 17:10
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class MyButton extends Button {
 
 
....
 
@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
// draw here, please pay attention on examples
    }
 
}
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
01.08.2013, 17:20  [ТС]
Запутали новичка...
Если я правильно понял, предлагаете создать свой класс с кнопкой и рисоваь в нем... Но как подключить эту кнопку в XML дизайн???

А без этого нельзя? А если хочу рисовать на SurfaceView? Вроде он специально для этого предназначен...
0
146 / 129 / 6
Регистрация: 29.07.2008
Сообщений: 506
01.08.2013, 17:24
если вам нужна именно кнопка с каким то кастомным изображением внутри - используйте кнопку.
если вам просто что то нарисовать надо - используейте сюрфейс.

в хмл вставить просто

XML
1
2
3
4
5
<com.tester64.megaapp.view.MyButton
 
                android:layout_height="match_parent"
                android:layout_width="match_parent"
/>
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
01.08.2013, 17:35  [ТС]
Кастомную кнопку успешно вставил - весь квадрат кнопки окрсился моим цветом и даже (нашел у китайцев) обрабатывает цветом нажатие. Но... мне не нужно было МЕНЯТЬ кнопку. Мне нужно было лишь заменить на вручную отрисовываемую картинку внутри кнопки над текстом в кнопке вида:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
         <Button
                android:id="@+id/Button_Rem"
                style="@style/BaseThemeButton_Yellow"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_marginLeft="3dp"
                android:layout_weight="5"
                android:drawablePadding="2sp"
                android:drawableTop="@drawable/my_pic"
                android:onClick="but_Click"
                android:paddingTop="15sp"
                android:text="Текст"
                android:textColor="#FFFF88"
                android:textSize="10sp"
                android:clickable="true"
                android:textStyle="bold"/>
То-есть вместо android:drawableTop="@drawable/my_pic" вставлять свой "временный" рисунок прямо из памяти. И принудительно его менять. Например нарисовать аналоговые часики и требовать нажать до истечения срока.

Кнопок может быть много и каждая со своим смыслом. Создавать по классу для каждой кнопки - сложно... проще сделать ЕДИНУЮ процедуру отрисовки с передаваемым внутрь парамером - кодом/номером/счетчиком кнопки.
0
Android Developer
 Аватар для Wenceslaus
131 / 131 / 6
Регистрация: 05.07.2013
Сообщений: 205
01.08.2013, 17:57
Что мешает создать/нарисовать свой drawable программно, и установить его на кнопку?
Java
1
button.setCompoundDrawablesWithIntrinsicBounds(null, temp_drawable, null, null);
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
01.08.2013, 18:11  [ТС]
Цитата Сообщение от Wenceslaus Посмотреть сообщение
Что мешает создать/нарисовать свой drawable программно, и установить его на кнопку?
То в чем и заключается вопрос! ПОМОГИТЕ НОВИЧКУ! Не знаю с чего начать!!!!
Есть класс отрисовки на основе View (из примеров)... А дальше что с ним делать??? Как подключить к картинке на кнопке?
0
Android Developer
 Аватар для Wenceslaus
131 / 131 / 6
Регистрация: 05.07.2013
Сообщений: 205
01.08.2013, 18:19
Если с самим классом проблем нет (создаётся, рисуется), то после рисование конвертните его в drawable:
Java
1
2
3
4
drawView.setDrawingCacheEnabled(true);
Bitmap bmp = Bitmap.createBitmap(drawView.getDrawingCache());
drawView.setDrawingCacheEnabled(false);
Drawable d = new BitmapDrawable(getResources(), bmp);
Если есть вопросы по работе с самим классом: класс в студию..
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
01.08.2013, 18:43  [ТС]
Как с вами всеми (гуру) тяжело общаться... Я - НОВИЧОК! Я же просил ПОЛНЫЙ ПРИМЕР! Как ВАШ КОД СКЛЕИТЬ ВМЕСТЕ???

Java
1
2
3
4
5
drawView.setDrawingCacheEnabled(true);
Bitmap bmp = Bitmap.createBitmap(drawView.getDrawingCache());
drawView.setDrawingCacheEnabled(false);
Drawable d = new BitmapDrawable(getResources(), bmp);
button.setCompoundDrawablesWithIntrinsicBounds(null, temp_drawable, null, null);
Где кнопка? Где вьюв? Как он создается? Какой параметр при содании вьюва - this или что-то другое? bmp это d?

Пример View (Draw2D) взял отсюда:
http://developer.alexanderklim... epaint.php
http://rusproject.narod.ru/android/simplepaint.htm
Теоретически рисует нормально... В крайнем случае все обнулю - пусть рисует белый лист. Но как его подключить...

Но как его приклеить к кнопке????
Java
1
2
3
4
5
6
7
8
9
10
public class SimplePaintActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Draw2D d = new Draw2D(this);
        setContentView(d);
        //setContentView(R.layout.main);
    }
}
Явно для кнопки не подходит!

В OnCreate
Java
1
2
3
4
5
6
7
           DrawRemRect drawView = new Draw2D(this);
 
            drawView.setDrawingCacheEnabled(true);
            Bitmap bmp = Bitmap.createBitmap(drawView.getDrawingCache());
            drawView.setDrawingCacheEnabled(false);
            Drawable d = new BitmapDrawable(getResources(), bmp);
((Button) findViewById(R.id.MyButton)).setCompoundDrawablesWithIntrinsicBounds(null, d, null, null);
Выдает ошибку компиляции....
0
Android Developer
 Аватар для Wenceslaus
131 / 131 / 6
Регистрация: 05.07.2013
Сообщений: 205
01.08.2013, 19:53

Не по теме:

Дать полный пример для работы с классом Draw2D, когда вы предоставили его полный код в первом посте

Цитата Сообщение от Tester64 Посмотреть сообщение
public class Draw2D extends View {...
это за гранью наших, как вы выразились, гуру, возможностей.



Код рисования и установки изображения на кнопку:
Java
1
2
3
4
5
6
7
8
9
        Draw2D drawView = new Draw2D(this); //создание экземпляра класса Draw2D (this == ActivityName.this)
        
        int w = 500, h = 500; // установка ширины / высоты изображения
        Bitmap.Config conf = Bitmap.Config.ARGB_8888; // конфигурация
        Bitmap bmp = Bitmap.createBitmap(w, h, conf); // создание Bitmap
        Canvas canvas = new Canvas(bmp); // создание Canvas
        drawView.draw(canvas); // зарисовка Bitmap
        Drawable d = new BitmapDrawable(getResources(), bmp); // конвертируем из Bitmap в Drawable
        ((Button) findViewById(R.id.MyButton)).setCompoundDrawablesWithIntrinsicBounds(null, d, null, null); // устанавливаем Drawable кнопке
Код класса Draw2D (обратите внимание на строку 52)
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
    public class Draw2D extends View {
        public Draw2D(Context context) {
            super(context);
        }
 
        @Override
        protected void onDraw(Canvas c) {
            super.onDraw(c);
 
            Paint paint = new Paint();
            paint.setStyle(Paint.Style.FILL);
 
            // закрашиваем холст белым цветом
            paint.setColor(Color.WHITE);
            c.drawPaint(paint);
 
            // Рисуем желтый круг
            paint.setAntiAlias(true);
            paint.setColor(Color.YELLOW);
            c.drawCircle(450, 30, 25, paint);
 
            // Рисуем зеленый прямоугольник
            paint.setColor(Color.GREEN);
            c.drawRect(20, 200, 460, 230, paint);
 
            // Рисуем текст
            paint.setColor(Color.BLUE);
            paint.setStyle(Paint.Style.FILL);
            paint.setAntiAlias(true);
            paint.setTextSize(30);
            c.drawText("Лужайка для котов", 30, 200, paint);
 
            // Текст под углом
            int x = 310;
            int y = 190;
 
            paint.setColor(Color.GRAY);
            paint.setTextSize(25);
            String str2rotate = "Лучик солнца!";
 
            // Создаем ограничивающий прямоугольник для наклонного текста
            Rect rect = new Rect();
 
            // поворачиваем холст по центру текста
            c.rotate(-45, x + rect.exactCenterX(), y + rect.exactCenterY());
 
            // Рисуем текст
            paint.setStyle(Paint.Style.FILL);
            c.drawText(str2rotate, x, y, paint);
 
            // восстанавливаем холст
//          c.restore(); восстанавливать нечего, ибо мы ничего не сохраняли
 
            // Выводим значок из ресурсов
            Resources res = this.getResources();
            Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.icon);
            c.drawBitmap(bitmap, 415, 655, paint);
        }
    }
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
01.08.2013, 20:24  [ТС]
Спасибо! Заработало! Теперь буду менять код и понимать его! Знаю несколько языков, но понять яву+апи андрода по примерам очень тяжело...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2013, 20:24
Помогаю со студенческими работами здесь

Как сделать отступы в радио кнопках
Добрый день! Подскажите пожалуйста, как сделать свои отступы в радио кнопках? Использую radiosToSlider. Там все скриптом прописывается, но...

Как в MFC менять размер и положение текста на кнопках?
Очень прошу помочь: 1). Как в MFC менять размер и положение текста на кнопках? 2). Такая проблема: есть 2 комбобокса: в 1 две...

Как отловить clik на созданных, через API, кнопках
Всем привет! Вопрос по API-функции: Const ICC_UPDOWN_CLASS = &amp;H10 ' updown Private Type InitCommonControlsExType ...

Подскажите, как сделать, чтобы формулы на кнопках имели красивый вид
Подскажите, как сделать, чтобы формулы на кнопках имели красивый вид. package Graphics; import javax.swing.*; import...

Как рисовать в C#
Мне нужно нарисовать на форме либо на панельки самым простым способом, т.е. конкретную точку в конкретной координате. НАпример нарисовать...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru