WindowManager 内的 ImageView 未在 Android 4.1 和 4.4 主屏幕中显示
ImageView inside WindowManager not showing in Android 4.1 and 4.4 in home screen
我有带静态图像的 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 也不同)。
这是我的代码。
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);
}
}
我能够通过服务中的 运行 WindowManager 解决问题。
基本上 Android 5 的生命周期发生了一些变化,这使得它从 Activity 开始工作,这实际上让我更加困惑。
这是实际有效的代码。
Animate ImageView inside WindowManager - Android
设置此权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
您可以使用:
windowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
我有带静态图像的 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 也不同)。
这是我的代码。
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);
}
}
我能够通过服务中的 运行 WindowManager 解决问题。 基本上 Android 5 的生命周期发生了一些变化,这使得它从 Activity 开始工作,这实际上让我更加困惑。
这是实际有效的代码。
Animate ImageView inside WindowManager - Android
设置此权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
您可以使用:
windowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);