1、程序思想
eoe的开始用了一个动画,eoe的结束同样用了一个动画,在主界面上重写onKeyDown方法监听返回键,在3秒内点击了两次返回键就播放一个动画,当动画播放完成就Finish当前的Activity退出程序。
2、两次点击退出实现
当触发退出事件是,主界面先被一个FramLayout充满把主界面的内容全部覆盖掉,然后播放关闭动画。
/**
* 连续按两次返回键就退出
*/
private int keyBackClickCount=0;//记录次数
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
switch (keyBackClickCount++) {
case 0:
Toast.makeText(this,
getResources().getString(R.string.press_again_exit),
Toast.LENGTH_SHORT).show();//提示在点一次退出
Timer timer = new Timer();//开一个定时器,三秒过后把计数器重置为0
timer.schedule(new TimerTask() {
@Override
public void run() {
keyBackClickCount=0;
}
}, 3000);
break;
case 1:
mFrameTv.setVisibility(0); //动画宿主设置可见,跟setVisibility(View.VISIABLE)一样,一个FramLayout布局里面带俩个Imageview,都是充满屏幕大小,一个白色Imageview,一个黑色Imageview.
mImgTv.setVisibility(0);
Animation anim = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.tv_off);
anim.setAnimationListener(new tvOffAnimListener());//设置播放完成退出
mImgTv.startAnimation(anim);//开始播放动画
break;
default:
break;
}
return true;
}
return super.onKeyDown(keyCode, event);
}
3、动画解读
大部分可以看上一讲的内容就可以看懂以下完成神马效果
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top" >
<scale
android:duration="200"
android:fillEnabled="true" //播放完是否保持完成状态
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:pivotX="50.0%"
android:pivotY="50.0%"
android:toXScale="1.0"
android:toYScale="0.0030" />
<scale
android:duration="200"
android:fillEnabled="true"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:pivotX="50.0%"
android:pivotY="50.0%"
android:startOffset="200"
android:toXScale="0.0"
android:toYScale="0.3" />
<alpha
android:duration="400"
android:fillAfter="true"
android:fillEnabled="true"
android:fromAlpha="1.0"
android:interpolator="@interpolator/accelerate_quint"
android:toAlpha="0.0" />
</set>
4、其他退出效果拓展
这个也是比较多的退出界面,弹出一个AlertDialog
我们也来写一个
new AlertDialog.Builder(getActivity()).setTitle("退出程序").setMessage("确定退出当前程序吗?").setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
}).setPositiveButton("取消", null).show();
当然没有上面那个这么漂亮,以为这段没有加上各种效果,如果想做成那个效果也可以,把apk的资源导出来后自定义Dialog加上效果就OK了。
不懂的可以关注我以后发的一些高仿贴