2011-05-13 26 views
0

我有一個使用振動許可的動態壁紙。當顯示所有應用程序的幻燈片屏幕被拉出時(點擊時顯示日曆/計算器/ Gmail等的灰色矩形按鈕),當點擊時,幻燈片屏幕上的圖標如Gmail /日曆/計算器等顫動。我不知道爲什麼會發生這種情況,因爲壁紙應該失去焦點,它的可見度應該已經改變,因此壁紙不應該是活躍的。但是,這在應用程序開始運行時不會發生。它只發生在幻燈片屏幕上。我實施了OnvisibilityChanged()如何檢查動態壁紙失去時焦點

public void onVisibilityChanged(boolean visible) { 
    this.visible = visible; 
    if (visible) { 
     iteration(); 
     drawFrame(); 
    } else { 
     // stop the animation 
     mHandler.removeCallbacks(mIteration); 
    } 
    } 

this.visible被設置爲false onSurfaceDestroyed

我也做

View view = new View(getApplicationContext()); 
view.setFocusableInTouchMode(true); 
view.setEnabled(true); 
view.requestFocusFromTouch(); 
if(view.hasWindowFocus()) 
{ 
Log.v(TAG,"WindowFocus="+view.hasWindowFocus()); 
vibrator.vibrate(100); 
} 

view.hasWindowFocus永遠是假的。爲什麼這個窗口的焦點總是假的,我怎麼讓壁紙失去焦點?

回答

1

一些事情...
1)你不能在動態壁紙內使用視圖。您必須將自己限制在您從holder.lockCanvas()獲得的畫布上。
2)這聽起來像你正在與發射器發生奇怪的交互。這些事情發生。如果你只是處理簡單的屏幕水龍頭,你可以通過使用onCommand()檢查android.wallpaper.tap而不是使用onTouchEvent()來解決你的問題。這是更好的做法,因爲您只會在壁紙的自由空間上點擊輕按;否則,您還將獲得由啓動器處理的屏幕印刷機。有一個關於按需有點資訊:http://developer.android.com/resources/articles/live-wallpapers.html
例如像這樣...

@Override 
public Bundle onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested) { 
    if (action.equals(WallpaperManager.COMMAND_TAP)) { 
      mTouchX = x; 
      mTouchY = y; 
    } 
    return super.onCommand(action, x, y, z, extras, resultRequested); 
}