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

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

Войти
Регистрация
Восстановить пароль
 
DIMA_N
1 / 1 / 0
Регистрация: 21.10.2011
Сообщений: 116
#1

Теория по рисованию - Программирование Android

15.08.2015, 00:43. Просмотров 246. Ответов 2
Метки нет (Все метки)

Доброе время суток!

Хочу узнать подробнее о рисовании в андроиде.

Мне нужно отображения анимации 120 элементов по заданной траектории. Я пытался делать это в отдельном классе View и с помощью метода OnDraw, в начале я делал в нем расчет каждой точки, таким способом у меня начинало виснуть с 5 элементов.

Сегодня переписал немного код, теперь я в начале записываю значения всей траектории (это круг) в массив для каждого элемента, а потом идет вызов метода OnDraw и там уже беру значения из этого массива. Таким методом у меня начинает лагать примерно с 15 элементов, забыл добавить что рисуется не только шарик в заданной точке, а еще из 50 точек рисуется линии за этим шаром.

В итоге выходит что такой способ тоже не применим в таком количестве.

Причем выводя состояние ЦП мое приложение не много ест процессора, где-то 1/4. Этого я тоже понять не могу почему оно не пытается есть больше.

Мои методы решения этой проблемы.
  1. Попробовать вызывать метод OnDraw реже.
  2. Запись траектории в один массив, но мне кажется этим получиться только оперативку сэкономить и не как не изменятся зависания.

Хотел бы получить консультацию от более опытных программистов какие есть методы решения данной задачи. Может стоит использовать не OnDraw, может попробовать использования какого то движка
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2015, 00:43     Теория по рисованию
Посмотрите здесь:

Теория по Android - Программирование Android
Здравствуйте друзья, есть такой вопрос. У параметра Visibility есть такие INVISIBLE и GONE. С INVISIBIL все понятно, прячет элемент, а вот...

Гуру, Теория сервисов - Программирование Android
Гуру, Помогите! Перечитал уроки, основы понял, но суть ускользает. ТАКИХ нюансов в уроках нет... скорее инструкции чем понимание... ...

Теория. Какой IF лучше? - Программирование Android
Добрый день. Хочу понять какой IF лучше использовать, какие недостатки и плюсы. Есть ли вообще разница. Возможно есть разница в...

Поясните по таймеру и рисованию на форме - C#
Доброго времени суток. Пытаюсь реализовать модель математического маятника. Есть такой забавный класс: public class Solver { ...

помощь по рисованию мышью на QGraphicsScene - C++ Qt
Доброго времени суток! пожалуйста, можете кинуть кусочек кода, отвечающий за рисование мышью в Qt на QGraphicsScene! наверняка уже...

Ищу программу по рисованию линий - Графические программы
Доброго времени суток! Есть ли такая программа, которая рисует линии, как на заставке рабочего стола в Windows Vista?? Пример:

Алгоритм функции по 3D рисованию детали - Lisp
Доброго всем времени суток! Задача следующая: Нарисовать деталь в 3D средствами Lisp: В связи с этим вопросы: 1. Как лучше...

Нужно доработать программу по рисованию - Assembler
Заранее говорю что в ассемблере очень плохо разбираюсь. Заранее всем спасибо . 1)Я так понимаю что написано для видеорежима 640*480 -...

OpenGL пример по рисованию графика от 3-х переменных - Delphi
Здравствуйте! Дайте пожалуйста пример кода OpenGL, в котором рисуется трехмерный график от 3-х переменных. Заранее спасибо!

Цикл для программы по рисованию линий - OpenGL
Всем привет! Нужно в программе для рисования линий сделать цикл на 100 выполнений, чтобы можно было определить какой алгоритм быстрее...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Горелый
70 / 44 / 11
Регистрация: 20.03.2014
Сообщений: 186
15.08.2015, 00:55     Теория по рисованию #2
Вью не предназначены для большой динамической графики. Тут уже нужно использовать OpenGLES
DIMA_N
1 / 1 / 0
Регистрация: 21.10.2011
Сообщений: 116
17.08.2015, 00:02  [ТС]     Теория по рисованию #3
Цитата Сообщение от Горелый Посмотреть сообщение
Вью не предназначены для большой динамической графики. Тут уже нужно использовать OpenGLES
Спасибо смотрю про openGLES, попыталя поставить в свой проект возникает ошибка.

Я на 1/4 экран через xml вставляю класс View
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false">
 
 
 
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#bbf"
        android:layout_weight="1">
        
        .
        .
        .
       
    </ScrollView>
 
 
    <ru.dima_n.elem.Anim
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/game_view"
        android:layout_weight="2"
        android:onClick="OnClickAnim"
        android:background="#000"/>
 
</LinearLayout>
Пытаюсь повторить такое

Класс Mian
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package ru.dima_n.opengl;
 
import android.opengl.GLSurfaceView;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
 
 
public class MainActivity extends ActionBarActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
Класс OpenGLES - пример с гугла
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
package ru.dima_n.opengl;
 
/**
 * Created by dim90_000 on 15.08.2015.
 */
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.view.View;
 
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import java.util.Random;
 
public class nRender implements GLSurfaceView.Renderer 
{
    public nRender()
    {
 
    }
 
    public void onDrawFrame(GL10 glUnused) { // Отрисовка кадра
 
        Random rnd = new Random();
 
        // Задаем случайный цвет и сводим с ума эпилептиков =)
        // Цвет задается в формате RGBA, от 0.0f до 1.0f.
        GLES20.glClearColor(((float)rnd.nextInt(2)/2.0f), ((float)rnd.nextInt(2)/2.0f), ((float)rnd.nextInt(2)/2.0f), 1.0f);
 
        GLES20.glClear( GLES20.GL_COLOR_BUFFER_BIT ); // Очищаем буффер цвета
    }
 
    public void onSurfaceChanged(GL10 glUnused, int width, int height) { // изменение поверхности, например изменение размера
 
        GLES20.glViewport(0, 0, width, height);
        // Устанавливаем положение и размер вьюпорта
        // вьюпорт устанавливаеться относительно поверхности ( OpenGLSurface ), в данном случае на весь экран.
        // замечу, что GLES20.glClear очищает всю поверхность, все зависимости от установки Viewport.
    }
 
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) { // вызываеться при создании поверхности
 
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
 
    <ru.dima_n.opengl.nRender
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/game_view"
 
    />
 
</LinearLayout>
Ошибки что класс не является View, Подскажите как OpenGLES встроить так же как View?
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
60
61
62
63
08-16 23:58:53.149  14524-14524/ru.dima_n.opengl E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.dima_n.opengl/ru.dima_n.opengl.MainActivity}: android.view.InflateException: Binary XML file line #8: Class is not a View ru.dima_n.opengl.nRender
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
            at android.app.ActivityThread.access$600(ActivityThread.java:150)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:213)
            at android.app.ActivityThread.main(ActivityThread.java:5225)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #8: Class is not a View ru.dima_n.opengl.nRender
            at android.view.LayoutInflater.createView(LayoutInflater.java:611)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
            at ru.dima_n.opengl.MainActivity.onCreate(MainActivity.java:21)
            at android.app.Activity.performCreate(Activity.java:5133)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
************at android.app.ActivityThread.access$600(ActivityThread.java:150)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
************at android.os.Handler.dispatchMessage(Handler.java:99)
************at android.os.Looper.loop(Looper.java:213)
************at android.app.ActivityThread.main(ActivityThread.java:5225)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:525)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
************at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassCastException: ru.dima_n.opengl.nRender cannot be cast to android.view.View
            at java.lang.Class.asSubclass(Class.java:1182)
            at android.view.LayoutInflater.createView(LayoutInflater.java:559)
************at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
************at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
************at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
************at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
************at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
************at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
************at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
************at ru.dima_n.opengl.MainActivity.onCreate(MainActivity.java:21)
************at android.app.Activity.performCreate(Activity.java:5133)
************at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
************at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
************at android.app.ActivityThread.access$600(ActivityThread.java:150)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
************at android.os.Handler.dispatchMessage(Handler.java:99)
************at android.os.Looper.loop(Looper.java:213)
************at android.app.ActivityThread.main(ActivityThread.java:5225)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:525)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
************at dalvik.system.NativeStart.main(Native Method)
Ответ Создать тему
Опции темы

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