12 мая в 00:09 (OFF) DenverKryk (S) :

JStudio Java Android

Вот, решил написать блог о том, как я изучаю Java Android программируя прямо на своем гаджете.
Да, изучить Java я уже дважды пытался, первый раз это было еще на кнопочных смартфонах, помню- тогда у меня была Nokia E63 с qwerty клавиатурой, тогда- что то более сложное чем Hello Word консольного написать не получилось, и IDE уже были вроде как, однако- компиляция, верификация, сборка- более сложные вещи просто не собирались в jar, а если и собирались, то не устанавливались. Да, тогда это была Java J2me как помню. :-) В общем- забросил я тогда это гиблое дело.
Второй раз решил изучить Java установив на компьютер всю кучу ПО необходимого для программирования, накачал кучу Samples и Examples, с головой ушел в изучение CSS, HTML, которые так же используются в Java проектах, в общем- изучал, изучал, но когда тот компьютер загнулся и я взял себе новый, попытался подвести итог- что же я выучил, что я могу и пришел к выводу- что ничего в Java я не понял, запутался в ней и одна каша в голове была, ну и - опять же- забросил.
Теперь же- имея за спиной такой опыт неудачных подходов и найдя для себя в Google Play IDE JStudio для программирования прямо на смартфоне я решил снова изучать этот самый Java. Начал конечно с консольных мейн классов, однако- потренировавшись с ними, попробовав еще чисто Java проекты понял- что с ними можно работать только через JStudio и запускаемых отдельно файлов чисто на Java мне там не создать, тогда я перешел на Android проекты.
33.5 Kб
Это пример демо програмки на Java Android

Вот мой первый собранный из проекта APK, идея была проста- чтоб почувствовать и показать мощность и скорость языка решил с помощью Canvas заполнять экран рандомными цветными точками, причем- в отличии от процедурных языков- так просто- по точке за проход сделать не получилось- перерисовка замедляла, так что вышел из положения- за один проход вносил через цикл по нескольку тысяч точек. Вот- java файл этого проекта
1.5 Kб
А это собственно сам java файл canvas

Далее- продвигаясь в изучении решил реализовать и сравнить тот же "снег" с применением более сложного SurfaceView, вот эти файлы:
34.3 Kб
Это более сложный вариант вывода '
3.4 Kб
А это собственно java файл андроид проекта

А дальше- больше. :-) Захотелось- чего то более осмысленного накодить, а не просто рандомный вывод :смех
В общем- первым моим твореньем в этих начинаниях стал, как мне казалось- сборник игровых моментов- как то- загрузка в проект картинки (взял из иконок проекта), движение спрайта и управление с помощью тачскрина, картинку обозвал bob.png
41.1 Kб
Вот, уже что то похожее на игру- по крайней
7.8 Kб
Это собственно главный и единственный

Закончив с этим, захотелось еще большего, начал гуглить примеры игр, почему то остановился на питоне и поняв, что пока что полноценную игру писать рано, опять же решил написать демку работоспособности кода, вдохновившись питоном и идеей подсчета FPS и регулировкой игровой скорости, отталкиваясь от полученной частоты кадров, в общем- вышло вот это :-)
36.2 Kб
Это динамичная демка, сверху две кнопки
14.5 Kб
Это основной файл проекта FpsAndSpeed

Управление регулировкой скорости было сделано через псевдо кнопки- два кружочка по сторонам экрана и проверка- куда ткнул- справа или слева от центра. :-)
И само собой, следующим направлением я для себя выбрал работу с кнопками. Помня горький опыт погружения в Css b Html при прежнем изучении Java, на этот раз решил- никакого Laiout, чистая Java, и еще одно- для удобства- все классы проекта держать в одном java файле. В общем- пересмотрел кучу видеотуториалов, пересмотрел кучу онлайн учебников, в большей степени - там была реализация посредством Laiout в IDE Android Studio на пк или кнопки на JPanel в J2me, оба этих варианта я отмел как не приемлемые, и тут вспомнил о искусственном интеллекте- нейросети aibuddy.ru, она по началу дала 11 запросов вроде как, чтоб ее оценить и в отличии от более жадных- бесплатно дает задать по одному вопросу в сутки, Ну и, за два-три дня накодил вот это:
35.7 Kб
Это реализация кнопок средствами SurfaceView
13.6 Kб
Как и всегда, никакого вмешательства

Для меня это было прорывом! Однако- слишком много кода получилось- для каждой кнопки пришлось повторять идентичный код, а все попытки вынести отрисовку в отдельный класс не увенчались успехом. И, время шло и начались следующие сутки и я опять же пошел за ответами к ИИ, поскольку поиски в гугле результатов не дали, все попытки написать класс процедур отрисовки приводили к ошибкам. Ну и, нейросеть- как всегда- разложила все по полочкам, да, вот диалог запроса:
я:
как в java android с применением surfaceview и canvas, имея основной public void run() отрисовки задать в отдельном классе процедуры прорисовки фрагментов по типу drawButton(MyButton) или drawFragment(MeFragment)?
нейросеть:
Для реализации процедур отрисовки различных фрагментов с использованием SurfaceView и Canvas в Android, вы можете создать отдельный класс, который будет отвечать за отрисовку различных элементов, таких как кнопок или фрагментов. Ниже приведен пример того, как можно организовать такую логику:

1. Создайте отдельный класс для рисования элементов (назовем его DrawingManager):

import android.graphics.Canvas;

public class DrawingManager {
public static void drawButton(Canvas canvas, MyButton button) {
// Реализация отрисовки кнопки на холсте
// Используйте данные из объекта button для настройки отображения кнопки
}

public static void drawFragment(Canvas canvas, MeFragment fragment) {
// Реализация отрисовки фрагмента на холсте
// Используйте данные из объекта fragment для настройки отображения фрагмента
}
}

2. В вашем основном классе, где у вас реализован метод run() для отрисовки, вызывайте соответствующие методы для отрисовки различных элементов:

public void run() {
while (isDrawing) {
if (holder.getSurface().isValid()) {
Canvas canvas = holder.lockCanvas();
if (canvas != null) {
canvas.drawColor(Color.WHITE); // Очистка холста

DrawingManager.drawButton(canvas, myButton); // Пример отрисовки кнопки
DrawingManager.drawFragment(canvas, meFragment); // Пример отрисовки фрагмента

holder.unlockCanvasAndPost(canvas);
}
}
}
}
3. Для передачи экземпляров MyButton и MeFragment в методы отрисовки, убедитесь, что у ваших классов есть необходимые данные для корректного отображения.
Этот подход позволяет структурировать и централизовать логику отрисовки различных элементов на холсте Canvas, облегчая поддержку и расширение кода.

Вот, тут уже проще стало, создал, прописал процедуры отрисовки и прочее в отдельный класс, после чего докодил выход их программы по кнопке и добавил описание, причем- в нем отработал вывод на Canvas большого объема текста с переходом на новую строку не по символам, а по словам, причем и тут без помощи ИИ не обошлось :смех Вот диалог запроса:
я:
имеем:
String text="#45";
int xPoz=0;
пишу:
p.getTextBounds(text,0,text,iength(),mTextBoundRect);
textWidth=p.meassureText(text);
textHeight=mTextBoundRect.height();
xPoz=xPoz+textWidth; // тут возникает ошибка
написано на java android. Как сложить xPoz и textWidth, в чем ошибка?
нейросеть:
Ошибка возникает из-за того, что метод measureText() возвращает ширину текста как float значение, а метод getTextBounds() используется для получения прямоугольной области, охватывающей текст. Поэтому их результаты не могут быть просто сложены напрямую.
Для корректного подсчета позиции xPoz учитывая ширину текста textWidth, можно использовать следующий подход:

String text = "#45";
int xPoz = 0;

Rect mTextBoundRect = new Rect();
Paint p = new Paint();
p.getTextBounds(text, 0, text.length(), mTextBoundRect);
float textWidth = p.measureText(text);

int totalTextWidth = Math.round(xPoz + textWidth); // Суммирование с округлением до целого значения

// Используйте totalTextWidth для дальнейших расчетов позиции xPoz или для других нужд

Таким образом, вам следует использовать сумму xPoz и ширины текста textWidth с последующим округлением значения до целого числа, чтобы избежать ошибок при работе с разными типами данных (float и int).

Ну и, немного поколдовав над кодом и имея эту подсказку я таки реализовал вывод текста на Canvas c переходом на новую строку по слову :-) Вот файлы того, что получилось:
37.8 Kб
Вот, допиленный вариант прежнего этюда
22.6 Kб
Вот, java файл MainActivity проекта

Да, как мне тут намекали, мол, на кой тебе эта Java сдалась, этот язык уже отмирает :ржу Однако- понять, как программировать в Объектно Ориентированных языках, разобраться, это многого стоит. И, на этот раз - думаю- разберусь с этой Java-ой, все же прогресс не стоит на месте и теперь все возможности имеются. :-)

Комментарии (1)

Пиздануться можно. Космос прям, блять!
Показать комментарий
Скрыть комментарий
Для добавления комментариев необходимо авторизоваться
Небоскреб мечты
Построй свой город мечты, создай свой бизнес и стань...
Тема: Светлая | Тёмная
Версия: Mobile | Lite | Touch | Доступно в Google Play