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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.74
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 306
#1

Кадровая анимация в eclipse. - Программирование Android

20.01.2012, 13:58. Просмотров 6628. Ответов 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 Кб, 61 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 13:58     Кадровая анимация в eclipse.
Посмотрите здесь:

Decimal в eclipse - Программирование Android
Доброго времени суток. Подскажите, пожалуйста, как можно работать с decimal в eclipse? Необходима точность, которой нет в float. ...

Маркеры в eclipse - Программирование Android
Здравствуйте. Я использую среду eclipse. Чтобы не чего не забыть и быстро найти нужные переменные - методы в огромном коде необходимо чем...

Eclipse SDK - Программирование Android
Без сил уже решить эту проблему.. Кто знает в чем проблема? При создании в Eclipse, Android приложения, ошибка импорта двух файлов в...

Android and Eclipse - Программирование Android
Как сделать так чтоб при сворачивание приложения музыка переставала играть? Может у кого уже есть кусок такого когда буду признателен

Eclipse переименование - Программирование Android
Подскажите, пожалуйста! При создании нового проекта (Eclipse) в Application name указывается имя самого приложения, которое будет...

eclipse for android - Программирование Android
У меня есть смартфон htc desire 500, как отлаживать на нем в eclipse, не могу его туда подключить, дрова может нада какие то ?

Ошибка в Eclipse - Программирование Android
Здравствуйте. При попытке компиляции проекта для android, Eclipse выдает ошибку. Unable to execute dex:...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
23.01.2012, 01:39     Кадровая анимация в eclipse. #2
Покадровая анимация - очень плохая идея, лучше использоваться спрайты. Вот здесь можешь постареть как работать с ними
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 306
23.01.2012, 16:01  [ТС]     Кадровая анимация в eclipse. #3
Цитата Сообщение от dajver Посмотреть сообщение
Вот здесь можешь постареть как работать с ними
Спасибо, постарел. Я еще тут постарел жестко, все супер, только высаживают частые периодические остановки во время перемещения на эмуляторе, с чем это может быть связанно?
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
24.01.2012, 00:14     Кадровая анимация в eclipse. #4
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Спасибо, постарел. Я еще тут постарел жестко, все супер, только высаживают частые периодические остановки во время перемещения на эмуляторе, с чем это может быть связанно?
В эмуляторе есть один очень большой недостаток - он очень тормазит, по этому все что сделал нужно проверять на телефоне, а вот на телефоне все будет нормально.
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 306
03.02.2012, 08:45  [ТС]     Кадровая анимация в eclipse. #5
Цитата Сообщение от dajver Посмотреть сообщение
В эмуляторе есть один очень большой недостаток - он очень тормазит, по этому все что сделал нужно проверять на телефоне, а вот на телефоне все будет нормально.
Посмотрел на телефоне ( htc - CPU speed 1Ghz, 512MB ROM and 576 RAM), мне кажется что анимация (на месте) нормальная но перемещение человечков все равно дерганное (это особенно заметно если максимальную скорость увеличить) – для файтинга врятли подойдет. Я долго бился над плавным перемещением в C++Builder и пришел к выводу что для плавного перемещения лучше использовать какую ни будь графическую библиотеку (например OpenGL), для андройда есть библиотека OpenGL ES (3D) и SGL(2D) ,а также Android поддерживает собственную графическую 2D -библиотеку Skia,. Если я не ошибаюсь OpenGL использует ресурсы видеокарты, а потому и скорость отрисовки изображения выше и как следствие движение более плавное. Но у андройда как таковой видеокарты нет, что использует библиотека OpenGL ES? Вы не пробовали использовать какую ни будь графическую библиотеку, станет ли движение (+анимация) более плавным?
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
05.02.2012, 16:43     Кадровая анимация в eclipse. #6
Цитата Сообщение от 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.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
06.02.2012, 02:09     Кадровая анимация в eclipse. #7
Цитата Сообщение от dajver Посмотреть сообщение
Думаю что опенГЛ сильно крута для новичка, советую начать изучать движки с AndEngine и jBox2D.
+ к этому можно посмотреть в сторону SurfaceView, самое то что бы понять основы. (мне в свое время помогло)
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 306
06.02.2012, 21:43  [ТС]     Кадровая анимация в eclipse. #8
Цитата Сообщение от dajver Посмотреть сообщение
Думаю что опенГЛ сильно крута для новичка, советую начать изучать движки с AndEngine и jBox2D.
Спасибо, а вы их пробовали, покажите пожалуйста какой ни будь пример создания спрайтовой анимации на их основе?

Добавлено через 1 час 31 минуту
Посмотрел я тут про AndEngine, чет мне не показалось легче чем опенГЛ
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
27.02.2012, 20:49     Кадровая анимация в eclipse. #9
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Спасибо, а вы их пробовали, покажите пожалуйста какой ни будь пример создания спрайтовой анимации на их основе?

Добавлено через 1 час 31 минуту
Посмотрел я тут про AndEngine, чет мне не показалось легче чем опенГЛ
На моем сайте ищите, я писал про спрайтовую анимацию и про SurfaceView. А так вот еще статья про andEngine вот, как по мне хорошая весч. Но я бы пользовался openGL, но Вам советую с основами разобраться. т.е. с surfaceView
Collapser
Сообщений: n/a
23.06.2012, 04:29     Кадровая анимация в eclipse. #10
Покадровую анимацию надо делать первым способом - в отдельный файл XML. Тогда много кадров - нормально. А в код программы - фигня получается кривая. Даже три кадра идут не по порядку 1-3-2.
Надо взять за основу пример "FrameAnimationXML" с диска и добавить в него кадров. Ну и переделать под свои задачи...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2012, 13:53     Кадровая анимация в eclipse.
Еще ссылки по теме:

Eclipse и Android - Программирование Android
виртуальная машина запускается, но сам проект нет. Т.е. пишет в консоле: И всё, дальше ничего не происходит. По идее дальше...

Совет по Eclipse - Программирование Android
Здравствуйте форумчане. Вот возникла такая беда вовремя изучения программирования под андроид в программе Eclipse. Как там обновлять...

Переустановка Eclipse - Программирование Android
пересаживал систему. Ну и вместе с ней eclipse. Установил Java, Скачал еклипс с присадками для андройда стал докачивать пакеты через...

Ошибка в Eclipse - Программирование Android
Доброго времени суток форумчане. Подскажите пожалуйста с чем может быть связана следующая ошибка, и если знаете, то подскажите как можно...

Беда с eclipse - Программирование Android
Всем привет. Вот, решил научиться программировать под андройд. Начал, естественно, с того, что зашёл на developer.android.com. Вроде...


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

Или воспользуйтесь поиском по форуму:
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
24.06.2012, 13:53     Кадровая анимация в eclipse. #11
Цитата Сообщение от Collapser Посмотреть сообщение
Покадровую анимацию надо делать первым способом - в отдельный файл XML. Тогда много кадров - нормально. А в код программы - фигня получается кривая. Даже три кадра идут не по порядку 1-3-2.
Надо взять за основу пример "FrameAnimationXML" с диска и добавить в него кадров. Ну и переделать под свои задачи...
покадровую анимацию первым способом уж точно не следует делать. ибо на более менее больших анимациях, у вас упадет с out of memory, ибо все картинки сразу грузятся в память.
Yandex
Объявления
24.06.2012, 13:53     Кадровая анимация в eclipse.
Ответ Создать тему
Опции темы

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