【Android】一段时间不操作弹出【屏保】效果

仿屏保效果最近项目的一个小Demo,和大家分享一下,本篇文章主要展示的是一个仿屏保的效果,用户在一段时间不操作会自动弹出屏保页面,当处于屏保页面的时候,【两秒内连续】按两次键盘【回车键】就会退出屏保页面,效果图如下:

下面具体介绍一下实现过程:

一 、5秒不操作自动锁屏界面

这个界面非常简单,就一个TextView,直接贴代码:

=======”5秒不操作自动锁屏”/></RelativeLayout>

二 、具体实现逻辑

首先看MainPresenter类,是计时具体的实现逻辑类,主要是通过Runnable来实现操作,当无操作时5秒后会执行Runnable,跳转到锁屏界面,5秒内有操作会重置计时,具体代码如下:

{MSG_SHOW_TIPS = 0x01;private IMainView mMainView;private MainHandler mMainHandler;private boolean tipsIsShowed = true;private Runnable tipsShowRunable = new Runnable(){(){mMainHandler.obtainMessage(MSG_SHOW_TIPS).sendToTarget();}};public MainPresenter(IMainView view){mMainView = view;mMainHandler = new MainHandler();}/**** <无操作时开始计时>* <功能详细描述>** @see [类、类#方法、类#成员]*/(){mMainHandler.postDelayed(tipsShowRunable, 5000);}/**** <结束当前计时,重置计时>* <功能详细描述>** @see [类、类#方法、类#成员]*/(){mMainHandler.removeCallbacks(tipsShowRunable);}(){tipsIsShowed = false;mMainHandler.removeCallbacks(tipsShowRunable);mMainHandler.postDelayed(tipsShowRunable, 5000);}{(Message msg){super.handleMessage(msg);switch (msg.what){case MSG_SHOW_TIPS:mMainView.showTipsView();tipsIsShowed = true;// 屏保显示,两秒内连续按下键盘Enter键可关闭屏保break;}}}}

三 、MainActivity.java是主页面

主要功能是重写OnKeyDown方法,监听键盘按下事件,一旦触发键盘事件,就会重置计时,另外在onResume()方法中默认开始计时,showTipsView()方法是计时完成弹出屏保界面。

{private MainPresenter mPresenter;(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mPresenter = new MainPresenter(this);}(int keyCode, KeyEvent event){//重置计时mPresenter.resetTipsTimer();return false;}(){//启动默认开始计时mPresenter.startTipsTimer();super.onResume();}(){//有其他操作时结束计时mPresenter.endTipsTimer();super.onPause();}(){//展示屏保界面Intent intent = new Intent(MainActivity.this, MyTimeActivity.class);startActivity(intent);}}

另外大家看到MainActivity实现了IMainView接口,IMainView很简单,就封装了一个showTipsView()方法,MainActivity实现了该方法而已,IMainView.java代码如下。

public interface IMainView{();}

四 、屏保界面MyTimeActivity.java

MyTimeActivity界面很简单,就是一个背景图,外加一个系统时间显示,还有就是两秒内连续两次按下回车键会退出屏保界面的逻辑,,具体代码如下,关键部分都加了注释:

{MSGKEY = 0x10001;private long exitTime = 0;//屏保右上角的系统时间private TextView mTime;(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.lock_screen);mTime = (TextView)findViewById(R.id.mytime);//启动线程刷新屏保界面右上角的时间new TimeThread().start();}{(){do{try{//更新时间Thread.sleep(1000);Message msg = new Message();msg.what = MSGKEY;mHandler.sendMessage(msg);}catch (InterruptedException e){e.printStackTrace();}} while (true);}}/*** 2秒内连续两次按下回车键退出屏保* 重写方法* @param keyCode* @param event* @return* @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)*/(int keyCode, KeyEvent event){if (keyCode == KeyEvent.KEYCODE_ENTER){exit();return false;}return super.onKeyDown(keyCode, event);}(){if ((System.currentTimeMillis() – exitTime) > 2000){Toast.makeText(getApplicationContext(), “再按一次解锁键即可进入应用”, Toast.LENGTH_SHORT).show();exitTime = System.currentTimeMillis();}else{finish();}}private Handler mHandler = new Handler(){(Message msg){super.handleMessage(msg);switch (msg.what){case MSGKEY:long sysTime = System.currentTimeMillis();CharSequence sysTimeStr = DateFormat.format(“hh:mm”, sysTime);mTime.setText(sysTimeStr);break;}}};}至此,仿屏保效果已经完成,很简单的一个例子,欢迎批评指正,共同学习,共同进步!

一个积极奋进的目标,一种矢志不渝的追求。

【Android】一段时间不操作弹出【屏保】效果

相关文章:

你感兴趣的文章:

标签云: