目标:
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的真实设备上运行时,屏幕出现但它保持在第一帧,动画将不会继续。我能做错什么?我真的很感激一些意见!
答案 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();
}