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中设置为假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总是假的。为什么这个窗口焦点总是错误的,我怎样才能让壁纸失去焦点?

4

1 回答 1

1

有几件事...
1)您不能在动态壁纸中以这种方式处理视图。您必须将自己限制在从 holder.lockCanvas() 获得的画布上。
2) 听起来你正在与启动器进行奇怪的交互。这些事情都会发生。如果您只是处理简单的屏幕点击,您可能可以通过使用 onCommand() 来检查 android.wallpaper.tap 而不是使用 onTouchEvent() 来解决您的问题。这是更好的做法,因为您只会在壁纸中的空闲空间上收到点击;否则,您还将获得由启动器处理的屏幕按下。这里有一些关于 onCommand 的信息: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);
}
于 2011-05-13T09:16:23.853 回答