Topic: Работаем с графикой. Основы
Обсуждаем статью Работаем с графикой. Основы
Все вопросы проплачены кошками - всемирно известными производителями котят
You are not logged in. Please login or register.
Для регистрации на форуме следует написать мне письмо. В ответе я напишу правильный ответ для прохождения регистрации.
Форум Александра Климова → Android → Работаем с графикой. Основы
Обсуждаем статью Работаем с графикой. Основы
Сначала хочу сказать Спасибо за уроки. А теперь вопрос: в данном уроке вместо setContentView(R.layout.activity_main); вы использовали Draw2D draw2D = new Draw2D(this); а не смогли бы вы объяснить как отобразить элементы, которые находятся в activity_main.xml и одновременно отобразить рисунок, допустим в imageview.
В реальности такой подход не часто используется. Конкретно, в ImageView так не получится, у него нет нужных методов. В моем примере показана простейшая реализация View. Но к нему можно добавить дополнительные конструкторы и тогда класс Draw2D будет выглядеть как остальные компоненты и его можно будет разместить в разметке activity_main рядом с остальными кнопками и т.п. Это есть в других уроках на сайте.
Возник вопрос.
Если вместо разметки мы указываем экземпляр класса, то каким образом он выводит метод onDraw()? И что необходимо передавать как Canvas в главном метода MainActivity?
Экземпляр класса работает сам по себе и вызывает свой метод onDraw() автоматически, когда ему надо что-то отобразить на экране. И работать с Canvas нужно в самом объекте, а не в MainActivity.
Подскажите пожалуйста, в каком уроке рассматривается размещение класса Draw2D в разметке activity_main рядом с остальными кнопками.
Не помню, может и нет такого урока. Вам нужно определить конструктор с параметрами атрибутов и будет вам счастье.
Приветствую. Во-первых ОГРОМНАЯ благодарность за уроки и низкий поклон.
По поводу этого урока, пробовал сделать картинку зависимой от размера экрана.
Самое трудное оказалось попасть "лучиком" в солнышко
В результате пришел к выводу, что поворот лучше делать не относительно центра экрана mRect.exactCenter X/Y
, а относительно самого "солнышка" т.е.
int radius = (screenWidth + screenHeight)/30;
int sunX = screenWidth*7/8;
int sunY = screenHeight*1/8;
canvas.drawCircle(sunX, sunY, radius, mPaint);
...
canvas.rotate(-45, sunX, sunY);
просто хотел поделиться
Александр, здравствуйте.
Поясните пожалуйста что значит "Щёлкаем правой кнопкой мыши на имени пакета"
в этом уроке http://developer.alexanderklimov.ru/and … epaint.php
Не могу понять куда всё-таки надо щёлкать(
Слева расположена структура вашего проекта. Когда вы создавали свой проект, то задавали имя пакету, например, com.example.hellokitty. Вот этот пакет и ищете в левой части.
Здравствуйте! Подскажите пожалуйста из за чего может происходить креш после метода canvas.restore();
но если заменить на обратный поворот canvas.rotate(+45, x + mRect.exactCenterX(), y + mRect.exactCenterY());
то все работает.
Нужно почитать сообщения об ошибках, там должно быть все описано.
> gekkelberryfin87: креш после метода canvas.restore();
Тоже столкнулся. Текст ошибки: "Underflow in restore - more restores than saves". Вылечил, добавив canvas.save() перед блоком о лучике солнца. Если поставить save прямо перед restore - ошибка тоже пропадет, но котик рисуется под углом, так же, как "лучик солнца".
Перепроверил, у меня такой ошибки не было. Но переписал немного пример, чтобы избежать подобной ошибки.
При запуске выдает ошибку. Скопировал Ваш исходный код, при запуске говорит:
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
at com.example.serdechenko.simplepaint.draw2d.onDraw(draw2d.java:85)
at android.view.View.draw(View.java:16217)
at android.view.View.updateDisplayListIfDirty(View.java:15214)
at android.view.View.draw(View.java:15987)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.updateDisplayListIfDirty(View.java:15209)
at android.view.View.draw(View.java:15987)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.updateDisplayListIfDirty(View.java:15209)
at android.view.View.draw(View.java:15987)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.updateDisplayListIfDirty(View.java:15209)
at android.view.View.draw(View.java:15987)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.updateDisplayListIfDirty(View.java:15209)
at android.view.View.draw(View.java:15987)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.draw(View.java:16220)
at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2692)
at android.view.View.updateDisplayListIfDirty(View.java:15214)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:283)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:289)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:324)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2651)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2470)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2103)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6064)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:860)
at android.view.Choreographer.doCallbacks(Choreographer.java:672)
at android.view.Choreographer.doFrame(Choreographer.java:608)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:846)
at android.os.Handler.handleCallback(Handler.java:742)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5571)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
я так понимаю, что не нравится ему метод getweight. Заменил его на цифровое значение, ничего не изменилось. В чем может быть проблема?
Вам написали - нет такого объекта. Как-то странно вы копируете код.
Код копировал несколько раз, проверял все. Так же нашел ошибку в Activity_main: Custom view Draw2D is not using the 2- or 3-argument View constructors; XML attributes will not work . Но решение, предложенное в интернете, не помогло, да и, мне кажется, это не связанные проблемы. Я так понимаю, что нет объекта Bitmap, хотя он, по идее, импортируется из пакета. Не может быть, что пакет устарел? Либо может я что-то упустил из виду?
Форум Александра Климова → Android → Работаем с графикой. Основы
Powered by PunBB, supported by Informer Technologies, Inc.