android - Android Launcher:允许触摸通过动态壁纸
问题描述
我正在尝试创建一个简单的 Android 启动器。
我还在使用动态壁纸 (Kustom LWP),我可以点击它的某些区域来执行操作。
我可以使用这些样式属性查看壁纸:
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowShowWallpaper">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
但是,如果我尝试点击墙纸上的某个项目,则触摸不会通过。
我试过android:clickable="false
and android:focusable="false"
,并将我的所有视图设置为setOnTouchListener
返回 false ,但这些都不能解决问题。
我该怎么做呢?
解决方案
回答我自己的问题:在 Launcher3 中进行了一些挖掘之后,我发现我需要在主屏幕视图的触摸侦听器上使用WallpaperManager
'函数:sendWallpaperCommand
import android.app.WallpaperManager;
private final int[] mTempXY = new int[2];
WallpaperManager mWallpaperManager = WallpaperManager.getInstance(context);
...
homeScreenView.setOnTouchListener((v, event) -> {
onWallpaperTap(v,event);
return true;
});
...
protected void onWallpaperTap(View view, MotionEvent ev) {
final int[] position = mTempXY;
view.getLocationOnScreen(position);
int pointerIndex = ev.getActionIndex();
position[0] += (int) ev.getX(pointerIndex);
position[1] += (int) ev.getY(pointerIndex);
MainActivity.mWallpaperManager.sendWallpaperCommand(view.getWindowToken(),
ev.getAction() == MotionEvent.ACTION_UP
? WallpaperManager.COMMAND_TAP : WallpaperManager.COMMAND_SECONDARY_TAP,
position[0], position[1], 0, null);
}
现在我的壁纸可以接收触摸输入了。
推荐阅读
- swift - 有什么方法可以快速录制慢动作视频吗?
- android - 处理 CursorAdapter 中的按钮点击
- javascript - 您如何在 Fluid Framework 中管理数据?
- python - 如何绘制按计数值排序的列词
- python - 如何将 STDIN 两次发送到 Popen 进程,每次都使用 EOF?
- python - 可视化时间序列的最佳方法,其中数据仅存在季节性
- reactjs - 在 react.js 上使用 Axios 从 API 中提取数据。我究竟做错了什么?
- android - Android:两种方式数据绑定调用editText中每个字符的更改
- php - 如何从 HTML 调用 PHP 来获取 url?
- google-sheets-api - Google Sheets API 中是否有访问脚本编辑器的方法?