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

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

Войти
Регистрация
Восстановить пароль
 
DIMA_N
1 / 1 / 0
Регистрация: 21.10.2011
Сообщений: 116
15.08.2015, 00:43     Теория по рисованию #1
Доброе время суток!

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

Мне нужно отображения анимации 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     Теория по рисованию
Посмотрите здесь:

Delphi OpenGL пример по рисованию графика от 3-х переменных
Софт Ищу программу по рисованию линий
C++ Qt помощь по рисованию мышью на QGraphicsScene
Нужно доработать программу по рисованию Assembler
Android Гуру, Теория сервисов
Теория по Android Android
Копаемся в коде по рисованию TGA картинок C++
C# Поясните по таймеру и рисованию на форме
Пишу игру танчики, нужен совет по рисованию мира OpenGL
Алгоритм функции по 3D рисованию детали Lisp
Цикл для программы по рисованию линий OpenGL
Теория. Какой IF лучше? Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Горелый
70 / 44 / 11
Регистрация: 20.03.2014
Сообщений: 177
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)
Yandex
Объявления
17.08.2015, 00:02     Теория по рисованию
Ответ Создать тему
Опции темы

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