Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android手機虛擬按鈕開發問題點

android手機虛擬按鈕開發問題點

編輯:關於Android編程

最近做了手機虛擬按鈕開發,和華為榮耀的虛擬按鈕類似,效果如下(屏幕底下部分):

\


功能描述:手機開機,“虛擬按鈕”自動隱藏,當從手機下邊沿往上滑動時候,就自動出現! 沒有操作的話,3秒就自動消失。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgINKqyrXP1tXiuPa5psTc0OjSqr3ivvbV4ry4uPbOyszio7qjqDGjqcjnus7Iw8bk1NrK1rv6v6q7+rXEyrG68sb0tq87o6gyo6nI57rOxNzU2sjOus6958PmtrzE3Lm7z+zTpsrWu/rKudPD1d/Q6NKqobDQ6cTisLTFpaGxtcTS4s28o6yyosfSta+z9qGw0OnE4rC0xaWhsTujqDOjqcjnus687LLiyrnTw9XftNPK1rv6z8Kx39HYzfnJz7ustq+1xMrCvP47o6g0o6nI57rOxKPE4tXmyrW1xGhvbWVfa2V5LCBtZW51X2tlebrNcmV0dXJuX2tlecrCvP6hozwvcD4KPHA+ICAgICAgz8LD5tK7uPbSu7j2tcTAtL3ivvbV4ry4uPbOyszio7o8L3A+CjxwPiAgICAgIKOoMaOpyOe6zsjDxuTU2srWu/q/qrv6tcTKsbryxvS2r6O6IDxicj4KPC9wPgo8cD4gICAgICAgICAgICAgICAg1eK88rWlo6y2qNLl0ru49nJlY2VpdmVyo6zG5GFjdGlvbs6qo7phbmRyb2lkLmludGVudC5hY3Rpb24uQk9PVF9DT01QTEVURUTV4tH5vs2/ydLUwcuho7K7uf2jrMTju+G3os/Wyta7+r+qu/rN6rPJuvPG8MLr09DSu7j2vc+zpLXE0dPKsc7Sw8e2qNLltcRhY3Rpb27AtMTcvdPK1bW9o6E8L3A+CjxwPiAgICAgIKOoMqOp0qrU2sjOus6958PmtrzE3LP2z9ahsNDpxOKwtMWlobGjrLKix9LE3Nf20rvQqcrCx+mjrLrcz9TIu87Sw8fQ6NKq0ru49lNlcnZpY2WjrNXiwO/O0rXEU2VydmljZcrHo7pOYXZCYXJTZXJ2aWNloaPU2sv509C958PmtrzE3LP2z9ahsNDpxOKwtMWlobGjrM7Sw8e+zda7xNzTw1dpbmRvd01hbmFnZXKjrM7Sw8e2vNaqtcC/ydLU08NXaW5kb3dNYW5hZ2VywLTKtc/W0Py4obSwv9qjrMbkyrXO0sPHobDQ6cTisLTFpaGxvs3Kx9K7uPbQ/Lihdmlldy48L3A+CjxwPiAgICAgICDK18/Izai5/dLUz8K0+sLru/HIoVdpbmRvd01hbmFnZXK1xMq1wdCjuldpbmRvd01hbmFnZXIgd207PC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">wm = (WindowManager)mContext.getSystemService("window"); 後面把我們布局好的view(LinearLayout holder;)添加上去就可以了:

wm.addView(holder, layoutparams);
這裡的LinearLayout holder;就是采用了一個LinearLayout來布局的!裡面已經布局好了三個按鈕:return按鈕; home按鈕;menu按鈕。

這裡我們要注意的是第二個參數:layoutparams

            	WindowManager.LayoutParams layoutparams = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT);
            	layoutparams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
            	layoutparams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                	    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
            	layoutparams.format = PixelFormat.TRANSLUCENT;
(3)如何檢測使用者從手機下邊沿往上滑動的事件;

這個簡單!就是用wm.addView添加一個簡單view, 其view設置為全部透明的!並且高度只需要15dip,將這個view放置於屏幕的底部。用該view來檢測使用者往上滑動的意圖。

所以最後就形成了該全部透明的view和上面提到的三個按鈕的view(holder) 相互切換,切換時候用WindowManager的renove來移除暫時不需要的view就可以了,如這樣: wm.removeView(holder);

(4)如何模擬真實的home_key, menu_key和return_key事件。

首先通過三個按鈕view的setOnLongClickListenerset和setOnClickListener來監聽長按和短按事件!接下來就是如何模擬真實按鍵的方法,這裡采用的是Instrumentation

    public static void home_LongDown() {
      // Log.i(TAG, "home home_LongDown  SystemClock.uptimeMillis()="+SystemClock.uptimeMillis());

       new Thread() {
            public void run() {
                try {
					KeyEvent ev = new KeyEvent(SystemClock.uptimeMillis()-100, SystemClock.uptimeMillis(), KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HOME, 1,
							0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
							KeyEvent.FLAG_LONG_PRESS | KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,
							InputDevice.SOURCE_KEYBOARD);

                    new Instrumentation().sendKeySync(ev);
                   // Log.i(TAG, "home_LongDown");
                    return;
                } catch (Exception e) {
                    Log.d(TAG, e.toString());
                }
            }
        }.start();

		//playSoundEffect(android.view.SoundEffectConstants.CLICK);
    }


    public static void home_click() {
        //Log.i(TAG, "home click");
        //playSoundEffect(android.view.SoundEffectConstants.CLICK);
        new Thread() {
            public void run() {
                try {
                    new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);
                  //  Log.i(TAG, "Home");
                    return;
                } catch (Exception e) {
                    Log.d(TAG, e.toString());
                }
            }
        }.start();
    }

上面的代碼就是模擬home-key長按和短按事件的代碼!其他的menu-key和return-key是一樣的

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved