在MainActivity.cs中我有这个方法
public override bool OnKeyUp(Keycode keyCode, KeyEvent e)
{
if (keyCode.ToString().Equals("F1"))
{
App.Left = true;
App.Right = false;
}
else if (keyCode.ToString().Equals("F2"))
{
App.Left = false;
App.Right = true;
}
else
{
App.Left = false;
App.Right = false;
}
return base.OnKeyUp(keyCode, e);
}
在我的Page类中,我如何不断检查左或右是否为真,以防触发事件?
答案 0 :(得分:1)
使用Dependency Service创建插件,您的共享界面应如下所示:
public interface IKeyEvent
{
event Action<KeyResult> OnKeyEvent;
}
public enum KeyResult {None, Left, Right};
相应地针对不同平台(Android / iOS / UWP)实现此功能并将其绑定到PCL项目。 (检查依赖服务实现以获取帮助)
将其链接到特定于平台的KeyUp事件。
对于android来说就像这样:
<强> Droid.KeyEventHandler 强>
[assembly: Dependency(typeof(KeyEventHandler))]
namespace YourNameSpace.Droid
{
public class KeyEventHandler : IKeyEvent
{
public static KeyEventHandler Current;
public KeyEventHandler()
{
Current = this;
}
public event Action<KeyResult> OnKeyResult;
public void RaiseKeyEvent(KeyResult key)
{
OnKeyResult?.Invoke(key);
}
}
}
<强> MainActivity 强>
public override bool OnKeyUp(Keycode keyCode, KeyEvent e)
{
KeyResult keyResult = KeyResult.None; // need to reference YourNameSpace.Shared project to use this enum
if (keyCode == KeyCode.A)
{
keyResult = KeyResult.Left;
}
else if (keyCode == KeyCode.D))
{
keyResult = KeyResult.Right;
}
else
{
keyResult = KeyResult.None;
}
if (KeyEventHandler.Current != null)
{
KeyEventHandler.Current.RaiseKeyEvent(keyResult);
}
return base.OnKeyUp(keyCode, e);
}
注意:左右键分别映射到物理键盘的A和D,由于某些原因我的Macbook的F1 / F2键没有注册到模拟器,所以我使用了A / d。
希望这会有所帮助:)