【问题标题】:Android Launcher: Allow touches to pass through to live wallpaperAndroid Launcher:允许触摸通过动态壁纸
【发布时间】:2021-01-12 04:51:13
【问题描述】:

我正在尝试创建一个简单的 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="falseandroid:focusable="false",并将我的所有视图都设置为返回false 的setOnTouchListener,但这些都不能解决问题。

我该怎么做呢?

【问题讨论】:

    标签: android touch live-wallpaper android-launcher


    【解决方案1】:

    回答我自己的问题:在 Launcher3 中进行了一些挖掘之后,我发现我需要在触摸监听器上使用 WallpaperManagersendWallpaperCommand 函数来获得主屏幕视图:

    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);
    }
    

    现在我的壁纸可以接收触摸输入了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      相关资源
      最近更新 更多