看到一个老外做的不错的android启动菜单的动画效果,小结下。

1 首先在drawable目录下放一些动画要用的图片。

2 splash.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/TheSplashLayout"
android:layout_gravity="center"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/SplashImageView"
android:layout_gravity="center"
>
</ImageView>
3 点启动窗口动画效果后显示的main.xml
<?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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>

3 SplashScreen.java
这里是欢迎启动类的核心部分
public class SplashScreen extends Activity {

/**
* The thread to process splash screen events
*/
private Thread mSplashThread;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Splash screen view
setContentView(R.layout.splash);

// Start animating the image
final ImageView splashImageView = (ImageView) findViewById(R.id.SplashImageView);
splashImageView.setBackgroundResource(R.drawable.flag);
final AnimationDrawable frameAnimation = (AnimationDrawable)splashImageView.getBackground();
splashImageView.post(new Runnable(){

public void run() {
frameAnimation.start();
}
});


final SplashScreen sPlashScreen = this;

// The thread to wait for splash screen events
mSplashThread = new Thread(){
@Override
public void run(){
try {
synchronized(this){
// Wait given period of time or exit on touch
wait(5000);
}
}
catch(InterruptedException ex){
}

finish();

// Run next activity
Intent intent = new Intent();
intent.setClass(sPlashScreen, MainActivity.class);
startActivity(intent);
stop();
}
};

mSplashThread.start();

}

@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
return false;
}

/**
* Processes splash screen touch events
*/
@Override
public boolean onTouchEvent(MotionEvent evt)
{
if(evt.getAction() == MotionEvent.ACTION_DOWN)
{
synchronized(mSplashThread){
mSplashThread.notifyAll();
}
}
return true;
}
4 为了更好看,在values 目录下添加样式文件
styles.xml:
<resources>
<style name="Animations" parent="@android:Animation" />
<style name="Animations.SplashScreen">
<item name="android:windowEnterAnimation">@anim/appear</item>
<item name="android:windowExitAnimation">@anim/disappear</item>
</style>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowAnimationStyle">@style/Animations.SplashScreen</item>
</style>
</resources>
注意下这里<style name="Animations" parent="@android:Animation" />
<style name="Animations.SplashScreen">
<item name="android:windowEnterAnimation">@anim/appear</item>
<item name="android:windowExitAnimation">@anim/disappear</item>
</style>
定义了当进入和退出时的动画效果是什么。具体的再
在anim目录下分别有显示和消失的两个效果的XML具体定义:
appear.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="800"
/>
</set>
disppear.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="800"
/>
</set>
这里其实就是透明度的设置而已:
然后在manifest.xml中,设置好使用的样式:
<activity
android:name="SplashScreen"
android:theme="@style/Theme.Transparent"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
</activity>
即可。

5 另外要注意的是,设置动画效果这段:
splashImageView.setBackgroundResource(R.drawable.flag);
final AnimationDrawable frameAnimation = (AnimationDrawable)splashImageView.getBackground();
splashImageView.post(new Runnable(){

public void run() {
frameAnimation.start();
}
});
由于动画效果的设置不能在oncreate中直接设置,而是要从GUI线程中创建的,因此
使用imageview类的POST方法,当GUI创建时就显示这个动画

详细代码可以从附件下载

更多相关文章

  1. Android——最新LitePal使用
  2. fitsSystemWindows的理解与沉浸式状态栏实现
  3. Android自带的TabLayout实现滑动翻页效果(实例)
  4. Android让帧动画在结束时消失
  5. android
  6. Android(安卓)应用语言设置的实现
  7. android 通过贝塞尔曲线 实现爱心点赞功能
  8. 实现三星S3蒲公英水波纹效果(三)——Activity水波纹实现篇
  9. Android(安卓)跑马灯效果

随机推荐

  1. android 双击返回键退出应用核心代码
  2. [Android]网络传输使用BufferedOutputStr
  3. Android(安卓)在activity之间传递对象
  4. 改变Android状态栏字体颜色和实现沉浸式
  5. Android(安卓)定时器Timer的使用
  6. 安装Android(安卓)studio 出现的问题及解
  7. android开发布局一_线性布局(LinearLayout
  8. Android(安卓)对话框 (三)自定义对话框
  9. linux 编译 android-apk 安装到window下
  10. Android(安卓)Studio插件推荐-GsonFormat