編輯:關於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(); }
不管是教學,還是為了演示,如果能將Android手機(或平板)的屏幕錄制成視頻文件,那是一件非常酷的事(iOS8已經提供了這一功能,能通過OSX直接在Mac上錄制iPad
先給大家這是下效果圖:谷歌提供的v4包,ViewPager在布局文件中,先添加<android.support.v4.view.ViewPager/>控件,這
由於Android並未提供滑動開關之類的組件,所以我們需要自己去實現一個自定義的視圖組件來實現滑動開關效果。 這裡有一個示例代碼,它包括三個類:開關組件視圖、狀態監聽接口
RecyclerView 是 android-support-v7-21 版本中新增的一個 Widgets, 還有一個 CardView 會在下次介紹使用。官方介紹 Re