Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/44: Рейтинг темы: голосов - 44, средняя оценка - 4.57
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583

Кадровая анимация в eclipse.

20.01.2012, 13:58. Показов 8344. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Голощапов А.Л. в книге - Google Android. Программирование для мобильных устройств (Профессиональное программирование) описал один из методов кадровой анимации, но его программа корректно работает только с 3 кадрами, а если туда добавить не 3 а (например) 8, то проигрывается только 4 ( примерно в таком порядке -1,3,5,7) . вроде все написано почти так же как у него, только кадров больше (ну и операторов).
Вот код Activity
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
64
65
66
67
68
69
70
71
72
73
74
75
76
package com.smples.frameaninimageview;
 
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
 
public class FrameAnimationActivity extends Activity {
    private final static int DURATION = 125;
    private AnimationDrawable mAnimation = null;
    private ImageView mImage;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {      
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mImage = (ImageView)findViewById(R.id.image);
        
        final Button btnStart = (Button) findViewById(R.id.btn_start);
        btnStart.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                start();
            }
        });
            
        final Button btnStop = (Button) findViewById(R.id.btn_stop);
        btnStop.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                stop();
            }
        });     
    }
    
    private void start()
    {
        BitmapDrawable frame1 = 
                   (BitmapDrawable)getResources().getDrawable(R.drawable.android51); 
                 BitmapDrawable frame2 = 
                   (BitmapDrawable)getResources().getDrawable(R.drawable.android52); 
                 BitmapDrawable frame3 = 
                   (BitmapDrawable)getResources().getDrawable(R.drawable.android53); 
                 BitmapDrawable frame4 = 
                   (BitmapDrawable)getResources().getDrawable(R.drawable.android54); 
                 BitmapDrawable frame5 = 
                   (BitmapDrawable)getResources().getDrawable(R.drawable.android55); 
                 BitmapDrawable frame6 = 
                   (BitmapDrawable)getResources().getDrawable(R.drawable.android56); 
                 BitmapDrawable frame7 = 
                    (BitmapDrawable)getResources().getDrawable(R.drawable.android57); 
                 BitmapDrawable frame8 = 
                    (BitmapDrawable)getResources().getDrawable(R.drawable.android58); 
         
         mAnimation = new AnimationDrawable();
         mAnimation.setOneShot(true);
         mAnimation.addFrame(frame1, DURATION);
         mAnimation.addFrame(frame2, DURATION);
         mAnimation.addFrame(frame3, DURATION);
         mAnimation.addFrame(frame4, DURATION);
         mAnimation.addFrame(frame5, DURATION);
         mAnimation.addFrame(frame6, DURATION);
         mAnimation.addFrame(frame7, DURATION);
         mAnimation.addFrame(frame8, DURATION);
         mImage.setBackgroundDrawable(mAnimation);
         
         mAnimation.setVisible(true,true);
         mAnimation.start();
    }
    private void stop()
    {
        mAnimation.stop();
        mAnimation.setVisible(false,false);
    }
}
Код main.xml
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <LinearLayout
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        android:layout_width="fill_parent">
        <Button
            android:id="@+id/btn_start"
            android:layout_height="wrap_content"
            android:text="Start" 
            android:layout_width="fill_parent" 
            android:layout_weight="1"/>
        <Button
            android:id="@+id/btn_stop"
            android:layout_height="wrap_content"
            android:text="Stop" 
            android:layout_width="fill_parent" 
            android:layout_weight="1"/>
    </LinearLayout>
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
<ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
        
</LinearLayout>
Код manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.smples.frameaninimageview"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".FrameAnimationActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
    </application>
    <uses-sdk android:minSdkVersion="3" />
 
</manifest>
Если поменять зацикливание
mAnimation.setOneShot(true);
на
mAnimation.setOneShot(false);
то проигрываются все кадры но сначала идут (примерно) 1,3,5,7, а потом уже 1,2,3,4,5,6,7,8.
Подскажите пожалуйста у вас нормально все работает, если нет то в чем причина?
Вложения
Тип файла: zip FrameAnimationImageView5.zip (321.4 Кб, 62 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2012, 13:58
Ответы с готовыми решениями:

Кадровая развертка
В листинге программы встретил такую запись : while (port and 8) = 0 do; {ожидаем обратный ход луча кадровой развертки} Что она...

Ремонт телевизора TCL. Кадровая
Привет всем! Прошу помощи понять проблему телевизора TCL (см.схему). Проблема началась ни с того, ни с сего. По включению (холодному)...

телевизор supra 2128u не работает кадровая
нужна схема шасси jm2985

10
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
23.01.2012, 01:39
Покадровая анимация - очень плохая идея, лучше использоваться спрайты. Вот здесь можешь постареть как работать с ними
1
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
23.01.2012, 16:01  [ТС]
Цитата Сообщение от dajver Посмотреть сообщение
Вот здесь можешь постареть как работать с ними
Спасибо, постарел. Я еще тут постарел жестко, все супер, только высаживают частые периодические остановки во время перемещения на эмуляторе, с чем это может быть связанно?
0
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
24.01.2012, 00:14
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Спасибо, постарел. Я еще тут постарел жестко, все супер, только высаживают частые периодические остановки во время перемещения на эмуляторе, с чем это может быть связанно?
В эмуляторе есть один очень большой недостаток - он очень тормазит, по этому все что сделал нужно проверять на телефоне, а вот на телефоне все будет нормально.
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
03.02.2012, 08:45  [ТС]
Цитата Сообщение от dajver Посмотреть сообщение
В эмуляторе есть один очень большой недостаток - он очень тормазит, по этому все что сделал нужно проверять на телефоне, а вот на телефоне все будет нормально.
Посмотрел на телефоне ( htc - CPU speed 1Ghz, 512MB ROM and 576 RAM), мне кажется что анимация (на месте) нормальная но перемещение человечков все равно дерганное (это особенно заметно если максимальную скорость увеличить) – для файтинга врятли подойдет. Я долго бился над плавным перемещением в C++Builder и пришел к выводу что для плавного перемещения лучше использовать какую ни будь графическую библиотеку (например OpenGL), для андройда есть библиотека OpenGL ES (3D) и SGL(2D) ,а также Android поддерживает собственную графическую 2D -библиотеку Skia,. Если я не ошибаюсь OpenGL использует ресурсы видеокарты, а потому и скорость отрисовки изображения выше и как следствие движение более плавное. Но у андройда как таковой видеокарты нет, что использует библиотека OpenGL ES? Вы не пробовали использовать какую ни будь графическую библиотеку, станет ли движение (+анимация) более плавным?
0
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
05.02.2012, 16:43
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Посмотрел на телефоне ( htc - CPU speed 1Ghz, 512MB ROM and 576 RAM), мне кажется что анимация (на месте) нормальная но перемещение человечков все равно дерганное (это особенно заметно если максимальную скорость увеличить) – для файтинга врятли подойдет. Я долго бился над плавным перемещением в C++Builder и пришел к выводу что для плавного перемещения лучше использовать какую ни будь графическую библиотеку (например OpenGL), для андройда есть библиотека OpenGL ES (3D) и SGL(2D) ,а также Android поддерживает собственную графическую 2D -библиотеку Skia,. Если я не ошибаюсь OpenGL использует ресурсы видеокарты, а потому и скорость отрисовки изображения выше и как следствие движение более плавное. Но у андройда как таковой видеокарты нет, что использует библиотека OpenGL ES? Вы не пробовали использовать какую ни будь графическую библиотеку, станет ли движение (+анимация) более плавным?
Думаю что опенГЛ сильно крута для новичка, советую начать изучать движки с AndEngine и jBox2D.
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
06.02.2012, 02:09
Цитата Сообщение от dajver Посмотреть сообщение
Думаю что опенГЛ сильно крута для новичка, советую начать изучать движки с AndEngine и jBox2D.
+ к этому можно посмотреть в сторону SurfaceView, самое то что бы понять основы. (мне в свое время помогло)
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
06.02.2012, 21:43  [ТС]
Цитата Сообщение от dajver Посмотреть сообщение
Думаю что опенГЛ сильно крута для новичка, советую начать изучать движки с AndEngine и jBox2D.
Спасибо, а вы их пробовали, покажите пожалуйста какой ни будь пример создания спрайтовой анимации на их основе?

Добавлено через 1 час 31 минуту
Посмотрел я тут про AndEngine, чет мне не показалось легче чем опенГЛ
0
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
27.02.2012, 20:49
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Спасибо, а вы их пробовали, покажите пожалуйста какой ни будь пример создания спрайтовой анимации на их основе?

Добавлено через 1 час 31 минуту
Посмотрел я тут про AndEngine, чет мне не показалось легче чем опенГЛ
На моем сайте ищите, я писал про спрайтовую анимацию и про SurfaceView. А так вот еще статья про andEngine вот, как по мне хорошая весч. Но я бы пользовался openGL, но Вам советую с основами разобраться. т.е. с surfaceView
1
Collapser
23.06.2012, 04:29
Покадровую анимацию надо делать первым способом - в отдельный файл XML. Тогда много кадров - нормально. А в код программы - фигня получается кривая. Даже три кадра идут не по порядку 1-3-2.
Надо взять за основу пример "FrameAnimationXML" с диска и добавить в него кадров. Ну и переделать под свои задачи...
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
24.06.2012, 13:53
Цитата Сообщение от Collapser Посмотреть сообщение
Покадровую анимацию надо делать первым способом - в отдельный файл XML. Тогда много кадров - нормально. А в код программы - фигня получается кривая. Даже три кадра идут не по порядку 1-3-2.
Надо взять за основу пример "FrameAnimationXML" с диска и добавить в него кадров. Ну и переделать под свои задачи...
покадровую анимацию первым способом уж точно не следует делать. ибо на более менее больших анимациях, у вас упадет с out of memory, ибо все картинки сразу грузятся в память.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.06.2012, 13:53
Помогаю со студенческими работами здесь

Запрос к регистру сведений "Кадровая история сотрудников"
Добрый день! Помогите разобраться с регистром сведений &quot;Кадровая история сотрудников&quot;. Цель - получить текущее подразделение...

Как сохранить консольную прогу в Eclipse, чтобы запускать без Eclipse
Как сохранить написанное консольное приложение в Eclipse так, чтобы я мог запустить его без Eclipse.

Eclipse. Какое сочетание клавиш или как открыть только что закрытый в Eclipse файл?
Я уже задавал подобный вопрос и мне дали на него ответ Alt+стрелка влево. Решение довольно-таки практичное, но случаются ситуации, когда я...

Eclipse + AVR Eclipse + WINAVR
Начал изучать программирование AVR на Cи, для разработки проектов выбрал istypsi в связке с WinAVR. Установил, работает нормально, вроде...

Анимация в OpenGL, а где собсно, анимация?
// Bounce.cpp // Demonstrates a simple animated rectangle program with GLUT // OpenGL SuperBible, 3rd Edition // Richard S. Wright...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru