Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
DIMA_N
1 / 1 / 1
Регистрация: 21.10.2011
Сообщений: 116
1

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

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

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

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

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

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

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

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

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

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

Поясните по таймеру и рисованию на форме
Доброго времени суток. Пытаюсь реализовать модель математического маятника....

Ищу программу по рисованию линий
Доброго времени суток! Есть ли такая программа, которая рисует линии, как на...

Алгоритм функции по 3D рисованию детали
Доброго всем времени суток! Задача следующая: Нарисовать деталь в 3D...

Нужно доработать программу по рисованию
Заранее говорю что в ассемблере очень плохо разбираюсь. Заранее всем спасибо ....

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

2
Горелый
70 / 44 / 17
Регистрация: 20.03.2014
Сообщений: 197
15.08.2015, 00:55 2
Вью не предназначены для большой динамической графики. Тут уже нужно использовать OpenGLES
0
DIMA_N
1 / 1 / 1
Регистрация: 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)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2015, 00:02

Копаемся в коде по рисованию TGA картинок
Я надеюсь это привлечет внимание и новичков и уже спецов Уже давно учу C++,...

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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