KJframeforandroid框架之 KJBlog学习(三):
来源:互联网 发布:山西东华软件 编辑:程序博客网 时间:2024/06/06 01:28
大家好,继续KJframeforandroid框架的学习。我们是对KJBlog开源项目的学习。
进入到KJBlog的主界面之后。
这里先讲这个主界面的一个小功能,就是单击返回键,然后最上面的title的文字“爱看博客”会变成“再次点击返回键切换到桌面”。而且是有动画效果的,然后如果小段时间内再点击返回键,会退出程序,但是如果过了一小段时间也没再按返回键,title上面的字就会再变成“爱看博客”。而且字在变化的时候是有动画效果的,比如“爱看博客”向下移动,然后“再次点击返回键切换到桌面”向上移动。
protected final Handler mMainLoopHandler = new Handler( Looper.getMainLooper());private boolean isOnKeyBacking;private final Runnable onBackTimeRunnable = new Runnable() { @Override public void run() { isOnKeyBacking = false; cancleExit(); } }; @Override public boolean onKeyDown(int keyCode, android.view.KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (isOnKeyBacking) { mMainLoopHandler.removeCallbacks(onBackTimeRunnable); isOnKeyBacking = false; // UIHelper.toHome(aty); KJActivityStack.create().AppExit(aty); } else { isOnKeyBacking = true; showExitTip(); mMainLoopHandler.postDelayed(onBackTimeRunnable, 2000); } return true; // } else if (keyCode == KeyEvent.KEYCODE_MENU) { // return true; } else { return super.onKeyDown(keyCode, event); } };
可以看出我们自定义一个boolean值变量isOnKeyBacking,默认是false,在监听KeyEvent.KEYCODE_BACK,第一次按下返回键的时候,因为isOnKeyBacking是false,所以会执行
isOnKeyBacking = true; showExitTip(); mMainLoopHandler.postDelayed(onBackTimeRunnable, 2000);我们把isOnKeyBacking 设置为true,执行showExitTip( ) ,这个方法就是等会内容“爱看博客”会变成“再次点击返回键切换到桌面”的方法,后面具体分析。
然后再运行一个Runnable,并且延迟2秒。如果用户在2秒之内,再次按了返回键,因为这时候的isOnKeyBacking = true;
所以执行
KJActivityStack.create().AppExit(aty);
其中KJActivityStack.java也是框架中一个封装类。
【
org.kymjs.kjframe.ui
Class KJActivityStack
- java.lang.Object
- org.kymjs.kjframe.ui.KJActivityStack
public final class KJActivityStackextends java.lang.Object
应用程序Activity管理类:用于Activity管理和应用程序退出
void
addActivity(I_KJActivity activity)
添加Activity到栈
void
AppExit(Context context)
应用程序退出
static KJActivityStack
create()
Activity
findActivity(java.lang.Class<?> cls)
获取当前Activity(栈顶Activity) 没有找到则返回null
void
finishActivity()
结束当前Activity(栈顶Activity)
void
finishActivity(Activity activity)
结束指定的Activity(重载)
void
finishAllActivity()
结束所有Activity
void
finishOthersActivity(java.lang.Class<?> cls)
关闭除了指定activity以外的全部activity 如果cls不存在于栈中,则栈全部清空
int
getCount()
获取当前Activity栈中元素个数
Activity
topActivity()
获取当前Activity(栈顶Activity)
】
这样就退出了应用程序了。
如果在2秒中之内没有再按返回键,则刚延迟2秒执行的Runnable就开始执行
public void run() { isOnKeyBacking = false; cancleExit(); }这时候就把isOnKeyBacking = false.所以你2秒之后再按返回键的时候isOnKeyBacking又变false了,而cancleExit( ) 是把内容“再次点击返回键切换到桌面”变成“爱看博客”的方法。从而只是相当于第一次按返回键。不会退出。
而动画切换的方法:
/** * 取消退出 */ private void cancleExit() { Animation anim = KJAnimations.getTranslateAnimation(0, 0, titleBarHeight, 0, 300); mTvTitle.startAnimation(anim); Animation anim2 = KJAnimations.getTranslateAnimation(0, 0,0, titleBarHeight, 300); anim2.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { mTvDoubleClickTip.setVisibility(View.GONE); } }); mTvDoubleClickTip.startAnimation(anim2); } /** * 显示退出提示 */ private void showExitTip() { mTvDoubleClickTip.setVisibility(View.VISIBLE); Animation anim = KJAnimations.getTranslateAnimation(0, 0, 0, titleBarHeight, 300); mTvTitle.startAnimation(anim); Animation anim2 = KJAnimations.getTranslateAnimation(0, 0, titleBarHeight, 0, 300); mTvDoubleClickTip.startAnimation(anim2); }
其实说白了就是。那个位置本来就有二个TextView,比如“爱看博客”是mTvTitle。“再次点击返回键切换到桌面”是mTvDoubleClickTip。然后mTvDoubleClickTip默认不可见(View.GONE),然后当第一次点击返回键的时候,让mTvDoubleClickTip可见,并且执行位移动画。在Y轴从45 到 0;也就形成了从下到上的动画。然后mTvTitle是执行位移从0到45。也就形成了从上到下的动画。而且会被中间的列表布局挡住,看不到的。当你2秒之后不再按返回键,则mTvDoubleClickTip和mTvTitle执行刚才相反的位置动画,然后mTvDoubleClickTip设置View.GONE。
(KJAnimations.java介绍在第一篇KJframeforandroid框架之 KJBlog学习(一)博客里面有提到。)
0 0
- KJframeforandroid框架之 KJBlog学习(三):
- KJframeforandroid框架之 KJBlog学习(一)
- KJframeforandroid框架之 KJBlog学习(二)
- KJFrameForAndroid框架学习----高效加载Bitmap
- KJFrameForAndroid框架学习----高效设置网络图片
- KJFrameForAndroid框架学习----深入理解注解原理
- KJFrameForAndroid框架学习----高效设置网络图片
- KJFrameForAndroid框架学习----高效加载Bitmap
- KJFrameForAndroid框架学习——多线程管理
- KJFrameForAndroid框架学习----高效加载Bitmap
- KJFrameForAndroid框架学习----深入理解注解原理
- KJFrameForAndroid框架学习----高效加载Bitmap
- KJFrameForAndroid框架学习----高效加载Bitmap
- KJFrameForAndroid 2.0框架使用
- Android中的框架-KJFrameForAndroid
- KJFrameForAndroid框架分析
- Spring框架学习之(三)--注解
- Android框架学习之RxJava(三)
- [Unity3D]Unity3D游戏开发之在Android视图中嵌入Unity视图
- Oracle学习笔记20150915常见循环语句以及goto语句
- TCP协议三次握手
- 浮躁的过去,开启的项目管理之路(一)
- SQL占用CPU100%
- KJframeforandroid框架之 KJBlog学习(三):
- NEtWorking_四种数据请求方式
- LEETCODE-Majority Element
- 数据结构-栈
- jstl标签库的运用
- 指针常量和常量指针
- Java中抽象类和接口的区别
- 中国十大热门网站榜中榜/Alexa综合排名TOP10(2015)
- +【CSS3】使用纯css代码实现图片轮播效果