逐帧动画问题与姜饼2.3.6

时间:2013-12-08 22:37:13

标签: android android-drawable

目标:

ImageButton上的逐帧动画,用户不必“点击”它,也通过xml。这已经完成,但它不适用于Android 2.3.6,我不能为我的生活,找出原因。

设置:

项目很干净,除了主要活动和主要活动中的 ImageButton 外别无其他。

主要活动:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ImageButton
    android:id="@+id/main_tree"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="28dp"
    android:contentDescription="@string/main_tree"
    android:background="#00000000"
    android:soundEffectsEnabled="true"
    android:padding="30dp"
    android:src="@drawable/growing_tree" />

</RelativeLayout>

如您所见,ImageButton指向 drawable growing_tree ,xml SELECTOR

growing_tree

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/anim_growing_tree" 
         android:state_enabled="true"    />

</selector>

而这一个反过来又指向实际的逐帧动画。

anim_growing_tree

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
            android:oneshot="false">

<item android:drawable="@drawable/tree1" android:duration="150" />
<item android:drawable="@drawable/tree2" android:duration="150"/>
<item android:drawable="@drawable/tree3" android:duration="150"/>
<item android:drawable="@drawable/tree4" android:duration="150"/>
<item android:drawable="@drawable/tree5" android:duration="150"/>
<item android:drawable="@drawable/tree6" android:duration="150"/>
<item android:drawable="@drawable/tree7" android:duration="150"/>
<item android:drawable="@drawable/tree8" android:duration="150"/>
<item android:drawable="@drawable/tree9" android:duration="150" />
<item android:drawable="@drawable/tree10" android:duration="150" />
<item android:drawable="@drawable/tree11" android:duration="150" />
<item android:drawable="@drawable/tree12" android:duration="150" />

</animation-list>

这一切都很直接。以防我将添加清单文件。

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.marstudio.memorytree"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="18" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.marstudio.memorytree.MainActivity"
        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>

</manifest>

当我使用带有android 4.2.2的Nexus-S模拟器运行它时,只要屏幕出现逐帧动画,它就可以正常工作。

两个.xml文件都在 res / drawable

现在,当我在装有Gingerbread 2.3.6的真实设备上运行时,屏幕出现但它保持在第一帧,动画将不会继续。我能做错什么?我真的很感激一些意见!

1 个答案:

答案 0 :(得分:0)

我只是遇到类似的问题;我在3种不同的现场设备上测试了我的应用程序,这是我的结论。

如果我将我的动画drawable声明为XML布局文件中ImageView的背景,那么它在Google Nexus 4上运行正常,但在HTC One和Sony Xperia Z1上它基本上会显示第1帧而不是动画所有

是的,所有手机上的操作系统版本都不同(例如HTC One还没有4.4),但由于你在2个完全不同版本的Android上遇到了类似的问题,这让我相信代码在不同Android风格下的行为方式存在一些主要差异 - 即你必须“正确”启动动画才能在所有手机上运行。

示例代码段:

@Override
public void onWindowFocusChanged(boolean hasFocus) {

    super.onWindowFocusChanged(hasFocus);

    splashImageViewAnimatedBeep = (ImageView) findViewById(R.id.splashImageBeep);
    splashImageViewAnimatedBeep.setBackgroundResource(R.drawable.splash_animation_beep);
    splashAnimationImageViewBeep = (AnimationDrawable) splashImageViewAnimatedBeep.getBackground();
    splashAnimationImageViewBeep.start();
}