Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
nikooolay
8 / 8 / 0
Регистрация: 20.11.2009
Сообщений: 410
#1

OpenGL внутни layout - Программирование Android

11.03.2013, 17:31. Просмотров 1244. Ответов 14
Метки нет (Все метки)

Необходимо что бы OpenGL не весь экран, а только часть.
В качестве примера OpenGL взял приложение- треугольник (см прикрепленные файлы - Пример 1)
Где вместо
Java
1
etContentView(type glsurfaceView);
заменил на
Java
1
2
3
4
5
6
7
8
  setContentView(R.layout.main);
        LinearLayout ll2 =(LinearLayout) findViewById(R.id.ll2);  
        GLSurfaceView s = new GLSurfaceView(this);
        s.setRenderer((Renderer) mGLView);
        //to add the view with your own parameters
        ll2.addView(s, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        //or simply use
        ll2.addView(s,0);
(см прикрепленные файлы - Пример Изменения )

В результате получил следующие ошибки.

Кликните здесь для просмотра всего текста
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.opengl/com.example.android.opengl.OpenGLES20Basic}: java.lang.ClassCastException: com.example.android.opengl.MyGLSurfaceView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1830)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
at android.app.ActivityThread.access$1500(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4277)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: com.example.android.opengl.MyGLSurfaceView
at com.example.android.opengl.OpenGLES20Basic.onCreate(OpenGLES20Basic.java:40)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794)
... 11 more


Причиной данных ошибок служит строка .setRenderer((Renderer) mGLView);, но как можно обойтись без нее?
0
Вложения
Тип файла: zip пример изменения.zip (59.3 Кб, 11 просмотров)
Тип файла: zip Пример.zip (13.4 Кб, 12 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2013, 17:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос OpenGL внутни layout (Программирование Android):

Анимированный дизайн смены Layout или просто выдвигаемый layout - Программирование Android
Ну, думаю тут и так всё понятно. Я просто не знаю, какие ключевые слова вводить в гугл, всё что попадается это Drawer А мне нужнен просто...

At android.widget.LinearLayout.setChildFrame Layout в Layout-те - Программирование Android
Нужен совет бывалых. У меня есть активити которое запускается с мейн активити, на нем лежит Layout (горизонтальный) в котором 2й...

Не хочет работать в layout, но включается в layout-land - Программирование Android
доброе утро ! пишу первое приложение. обычный мейн.хмель выглядит вот так : <?xml version="1.0" encoding="utf-8"?> <LinearLayout...

Добавить layout на layout - Программирование Android
Нашёл такой код: layout.add(view); только не понимаю куда его писать. Нужно чтобы один layout можно было использовать в нескольких других. ...

Layout - Программирование Android
Здравствуйте! На layout кидаю изображение через ImaageView, при эмуляции по бокам экрана есть отступ.ImageView (по содержимому,вставлял...

Layout со скроллингом - Программирование Android
нужно в Activity разместить много кнопок одна под одной, НО они все не уместятся на экране и нужно чтобы они прокручивались пальцем вверх и...

14
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.03.2013, 18:06 #2
ну, видимо mGLView не Renderer.
0
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
11.03.2013, 18:42 #3
GLSurfaceView is just one way to incorporate OpenGL ES graphics into your application. For a full-screen or near-full screen graphics view, it is a reasonable choice. Developers who want to incorporate OpenGL ES graphics in a small portion of their layouts should take a look at TextureView. For real, do-it-yourself developers, it is also possible to build up an OpenGL ES view using SurfaceView, but this requires writing quite a bit of additional code.

http://developer.android.com/trainin...vironment.html
Может все таки тебе стоит использовать TextureView.
Так как если используешь GLSurfaceView то для его инициализации ты должен зарегать класс который отвечает за рендеринг.

Java
1
setRenderer(GLSurfaceView.Renderer)
0
nikooolay
8 / 8 / 0
Регистрация: 20.11.2009
Сообщений: 410
12.03.2013, 14:52  [ТС] #4
Так как если используешь GLSurfaceView то для его инициализации ты должен зарегать класс который отвечает за рендеринг.
Java
1
setRenderer(GLSurfaceView.Renderer)
ошибка
GLSurfaceView.Renderer cannot be resolved to a variable
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.03.2013, 15:06 #5
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
setRenderernew (new GLSurfaceView.Renderer() {
                
                @Override
                public void onSurfaceCreated(GL10 gl, EGLConfig config) {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public void onSurfaceChanged(GL10 gl, int width, int height) {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public void onDrawFrame(GL10 gl) {
                    // TODO Auto-generated method stub
                }
            });
0
nikooolay
8 / 8 / 0
Регистрация: 20.11.2009
Сообщений: 410
12.03.2013, 17:05  [ТС] #6
Предлагает создать метод setRenderernew.
Что писать в нем?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.03.2013, 17:51 #7
блин, да опечатка это, не нужно все так бездумно копировать...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
setRenderer(new GLSurfaceView.Renderer() {
                
                @Override
                public void onSurfaceCreated(GL10 gl, EGLConfig config) {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public void onSurfaceChanged(GL10 gl, int width, int height) {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public void onDrawFrame(GL10 gl) {
                    // TODO Auto-generated method stub
                }
            });
0
nikooolay
8 / 8 / 0
Регистрация: 20.11.2009
Сообщений: 410
12.03.2013, 18:49  [ТС] #8
Сделал по вашему примеру(по факту получился такой же рендер как и при варианте
Java
1
  s.setRenderer((Renderer) mGLView);
)
и практически такой же список ошибок
Кликните здесь для просмотра всего текста
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.opengl/com.example.android.opengl.OpenGLES20Basic}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1830)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
at android.app.ActivityThread.access$1500(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4277)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:2062)
at android.view.ViewGroup.addView(ViewGroup.java:1957)
at android.view.ViewGroup.addView(ViewGroup.java:1914)
at com.example.android.opengl.OpenGLES20Basic.onCreate(OpenGLES20Basic.java:77)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794)
... 11 more

Почему не работает вот такой вариант
Java
1
2
3
4
5
6
  setContentView(R.layout.main);
        mGLView = new MyGLSurfaceView(this);
       // setContentView(mGLView);
        SurfaceView s = (SurfaceView)findViewById(R.id.surfaceView1);
        s =(SurfaceView)mGLView;
        s.refreshDrawableState();
При запуске не отрисовываются элементы в SurfaceView

Добавлено через 23 минуты
Проект с ошибками git://git.assembla.com/opengles20basic.git
0
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
12.03.2013, 18:54 #9
Цитата Сообщение от nikooolay Посмотреть сообщение
ошибка
Не думал что ты тупо копипэйст сделаешь
Я намекал тебе, что надо реализовать интерфейс GLSurfaceView.Renderer!

Может еще рано за OpenGL браться?

Добавлено через 1 минуту
Цитата Сообщение от nikooolay Посмотреть сообщение
Проект с ошибками git://git.assembla.com/opengles20basic.git
Вот этот лучше используй в качестве образца
http://developer.android.com/shareab...g/OpenGLES.zip
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.03.2013, 20:20 #10
Цитата Сообщение от nikooolay Посмотреть сообщение
и практически такой же список ошибок
это называется stack trace и здесь уже совсем другая ошибка в другом участке кода.


Цитата Сообщение от nikooolay Посмотреть сообщение
Почему не работает вот такой вариант
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
* setContentView(R.layout.main);
* * * * mGLView = new MyGLSurfaceView(this);
* * * *// setContentView(mGLView);
* * * * SurfaceView s = (SurfaceView)findViewById(R.id.surfaceView1);
* * * * s =(SurfaceView)mGLView;
* * * * s.refreshDrawableState();
При запуске не отрисовываются элементы в SurfaceView
no comments


Цитата Сообщение от c4sp3r Посмотреть сообщение
Может еще рано за OpenGL браться?
здесь рано за андроид браться, азы программирования учить ему надо.
0
nikooolay
8 / 8 / 0
Регистрация: 20.11.2009
Сообщений: 410
12.03.2013, 21:19  [ТС] #11
Цитата Сообщение от c4sp3r Посмотреть сообщение
Не думал что ты тупо копипэйст сделаешь
Я намекал тебе, что надо реализовать интерфейс GLSurfaceView.Renderer!

Может еще рано за OpenGL браться?

Добавлено через 1 минуту
Вот этот лучше используй в качестве образца
http://developer.android.com/shareab...g/OpenGLES.zip
Если мне кто нибудь расскажет каким образом можно плавно поворачивать изображение без OpenGL, которое подтормаживает при поворотах canvasом из-за копирования bitmap, а без копирования (только накладкой матрицы) приходится выбирать между точкой вращения и масштабированием, я откажусь от OpenGL сразу же.
ЗЫ анимация тоже не подходит

Добавлено через 8 минут
+ непосредственно поворот элемента не подходит из-за того что в процессе поворота (кроме 1, смещается центр)
Данный пример и использую.
0
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
12.03.2013, 22:07 #12
nikooolay, Сорри если не прав но просто судя по твоим ответам складывается мнение что ты даже основ ООП не знаешь. А если так смысла продолжать топик нет!
0
nikooolay
8 / 8 / 0
Регистрация: 20.11.2009
Сообщений: 410
13.03.2013, 01:32  [ТС] #13
Цитата Сообщение от c4sp3r Посмотреть сообщение
nikooolay, Сорри если не прав но просто судя по твоим ответам складывается мнение что ты даже основ ООП не знаешь. А если так смысла продолжать топик нет!
Естественно оно будет складываться если уже пару дней толчешься в теме(openGL) в которой абсолютный ноль.
Ну это уже к вопросу о нетипичных примерах для самых простых случаев.
0
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
13.03.2013, 10:48 #14
nikooolay, толи еще будет ты еще до программирования шейдеров не дошел
0
nikooolay
8 / 8 / 0
Регистрация: 20.11.2009
Сообщений: 410
13.03.2013, 11:03  [ТС] #15
Цитата Сообщение от c4sp3r Посмотреть сообщение
nikooolay, толи еще будет ты еще до программирования шейдеров не дошел
Уже смотрел
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 11:03
Привет! Вот еще темы с ответами:

TextViews и Layout - Программирование Android
Здравствуйте! Имеется много генерируемых TextView. Как их можно поставить друг за дугом, что бы получился текст, как в обчной статье? ...

Очистить layout - Программирование Android
Доброго времени суток! У меня есть очень большая анкета(около 120 EditText и CheckBox). Мне надо реализовать кнопку Очистить. ...

Разметка layout - Программирование Android
Хочу сделать вот такую разметку. Т.е. как-бы объединить ячейки, чтобы можно было в эту ячейку добавить компонент. Как это можно сделать?

Квадратный Layout - Программирование Android
Как создать в XML разметке КВАДРАТНЫЙ layout, вычисление размеров можно задать алгоритмом: ставим height и width == match_parent, если...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
13.03.2013, 11:03
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru