0

我有带有静态图像的 ImageView。当我使用 TYPE_PHONE 将此 ImageView 添加到 WindowManager 时,它在所有 Android 版本(4.1、4.4、5.0)上都可以正常显示。但是,当我按下主页按钮并退出应用程序时,在 4.1 和 4.4 中,ImageView 消失了。它在 5.0 中运行良好

我没有看到任何异常抛出。当我在 Android 4.4 中运行它时,我只看到以下错误,我在其他帖子中发现我可以安全地忽略它?

1613-1613/info.bosung.smate E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from GradienCache
1613-1613/info.bosung.smate E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384
1613-1613/info.bosung.smate E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
1613-1613/info.bosung.smate E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384

我包含了 3 个屏幕截图,显示了发生的情况(4.4 和 4.1 也不同)。

ImageView 在 4.4 和 4.1 中不起作用的示例

这是我的代码。

public class MainActivity extends ActionBarActivity {

private WindowManager windowManager;
ImageView rocketImage1;

WindowManager.LayoutParams params;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    rocketImage1 = new ImageView(this);
    rocketImage1.setBackgroundResource(R.drawable.a1);

    // Setup layout parameter
    params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT; // Orientation
    params.x = 150; // where you want to draw this, coordinates
    params.y = 150;
    params.alpha = 0.5f;
    params.width = 150;
    params.height = 250;

    // At it to window manager for display, it will be printed over any thing
    windowManager.addView(rocketImage1, params);
 }
 }
4

3 回答 3

0

我能够通过从服务运行 WindowManager 来解决问题。基本上,在 Android 5 的生命周期中发生了一些变化,这使得它可以从 Activity 工作,这实际上让我更加困惑。

这是实际工作的代码。

在 WindowManager 中为 ImageView 设置动画 - Android

于 2015-03-19T08:35:50.407 回答
0

设置此权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
于 2016-11-27T20:32:29.143 回答
0

您可以使用:

windowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
于 2017-07-26T02:52:41.873 回答