【Android】一段時間不操作彈出【屏保】效果

來源:互聯網
上載者:User

標籤:android   屏保   兩次斷行符號鍵   仿效果   demo   

仿屏保效果最近項目的一個小Demo,和大家分享一下,本篇文章主要展示的是一個仿屏保的效果,使用者在一段時間不操作會自動彈出屏保頁面,當處於屏保頁面的時候,【兩秒內連續】按兩次鍵盤【斷行符號鍵】就會退出屏保頁面,如下:

下面具體介紹一下實現過程:

一 、5秒不操作自動鎖定畫面

這個介面非常簡單,就一個TextView,直接貼代碼:

<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"    tools:context=".MainActivity" >      <TextView          android:id="@+id/start"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:textSize="30sp"         android:gravity="center"         android:textStyle="bold"         android:textColor="#698048"         android:text="5秒不操作自動鎖屏"          /></RelativeLayout>

二 、具體實現邏輯

首先看MainPresenter類,是計時具體的實現邏輯類,主要是通過Runnable來實現操作,當無操作時5秒後會執行Runnable,跳轉到鎖定畫面,5秒內有操作會重設計時,具體代碼如下:

public class MainPresenter{    public final static int MSG_SHOW_TIPS = 0x01;    private IMainView mMainView;    private MainHandler mMainHandler;    private boolean tipsIsShowed = true;    private Runnable tipsShowRunable = new Runnable()    {        @Override        public void run()        {            mMainHandler.obtainMessage(MSG_SHOW_TIPS).sendToTarget();        }    };    public MainPresenter(IMainView view)    {        mMainView = view;        mMainHandler = new MainHandler();    }    /**     *      * <無操作時開始計時>     * <功能詳細描述>     *      * @see [類、類#方法、類#成員]     */    public void startTipsTimer()    {        mMainHandler.postDelayed(tipsShowRunable, 5000);    }    /**     *      * <結束當前計時,重設計時>     * <功能詳細描述>     *      * @see [類、類#方法、類#成員]     */    public void endTipsTimer()    {        mMainHandler.removeCallbacks(tipsShowRunable);    }    public void resetTipsTimer()    {        tipsIsShowed = false;        mMainHandler.removeCallbacks(tipsShowRunable);        mMainHandler.postDelayed(tipsShowRunable, 5000);    }    public class MainHandler extends Handler    {        @Override        public void handleMessage(Message msg)        {            super.handleMessage(msg);            switch (msg.what)            {                case MSG_SHOW_TIPS:                    mMainView.showTipsView();                    tipsIsShowed = true;                    // 屏保顯示,兩秒內連續按下鍵盤Enter鍵可關閉屏保                    break;            }        }    }}

三 、MainActivity.java是首頁面

主要功能是重寫OnKeyDown方法,監聽鍵盤按下事件,一旦觸發鍵盤事件,就會重設計時,另外在onResume()方法中預設開始計時,showTipsView()方法是計時完成彈出屏保介面。

public class MainActivity extends Activity implements IMainView{    private MainPresenter mPresenter;    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mPresenter = new MainPresenter(this);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event)    {        //重設計時        mPresenter.resetTipsTimer();        return false;    }    @Override    protected void onResume()    {        //啟動預設開始計時        mPresenter.startTipsTimer();        super.onResume();    }    @Override    protected void onPause()    {        //有其他動作時結束計時        mPresenter.endTipsTimer();        super.onPause();    }    @Override    public void showTipsView()    {        //展示屏保介面        Intent intent = new Intent(MainActivity.this, MyTimeActivity.class);        startActivity(intent);    }}

另外大家看到MainActivity實現了IMainView介面,IMainView很簡單,就封裝了一個showTipsView()方法,MainActivity實現了該方法而已,IMainView.java代碼如下。

public interface IMainView{    public void showTipsView();}

四 、屏保介面MyTimeActivity.java

MyTimeActivity介面很簡單,就是一個背景圖,外加一個系統時間顯示,還有就是兩秒內連續兩次按下斷行符號鍵會退出屏保介面的邏輯,具體代碼如下,關鍵區段都加了注釋:

public class MyTimeActivity extends Activity{    private static final int MSGKEY = 0x10001;    private long exitTime = 0;    //屏保右上方的系統時間    private TextView mTime;    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.lock_screen);        mTime = (TextView)findViewById(R.id.mytime);        //啟動線程重新整理屏保介面右上方的時間        new TimeThread().start();    }    public class TimeThread extends Thread    {        @Override        public void run()        {            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)     */    @Override    public boolean onKeyDown(int keyCode, KeyEvent event)    {        if (keyCode == KeyEvent.KEYCODE_ENTER)        {            exit();            return false;        }        return super.onKeyDown(keyCode, event);    }    public void exit()    {        if ((System.currentTimeMillis() - exitTime) > 2000)        {            Toast.makeText(getApplicationContext(), "再按一次解鎖鍵即可進入應用", Toast.LENGTH_SHORT).show();            exitTime = System.currentTimeMillis();        }        else        {            finish();        }    }    private Handler mHandler = new Handler()    {        @Override        public void handleMessage(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】一段時間不操作彈出【屏保】效果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.