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

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

01.08.2013, 16:58. Показов 5454. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru