Tizen Watch 表圈互动
Tizen Watch Bezel Interaction
我正在尝试为 Galaxy Watch 开发一个简单的应用程序,其中包括一个使用可旋转表圈递增和递减的计数器,但我无法让它响应旋转事件。我创建了一个实现 BezelInteractionPage
的页面和一个简单的 class,其中包含实现 IRotaryEventReceiver
的计数器,并在检测到旋转事件时更新 Label
,并设置页面的RotaryFocusObject
到后者 class 的一个实例,我认为这反映了 Tizen.CircularUI GitHub repo 中的一个示例所做的事情。这是我的代码:
public class MainPage : BezelInteractionPage
{
public MainPage()
{
Label text = new Label
{
Text = "0"
};
var proxy = new RotaryFocusProxy(text);
Content = new StackLayout
{
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
Children =
{
text
}
};
RotaryFocusObject = proxy;
}
}
class RotaryFocusProxy : IRotaryEventReceiver
{
private int x;
private Label label;
public RotaryFocusProxy(Label l)
{
x = 0;
label = l;
}
public void Rotate(RotaryEventArgs args)
{
if (args.IsClockwise)
x++;
else
x--;
label.Text = x.ToString();
}
}
除了主要的 class,这是项目中唯一的文件,它是我从“空白应用程序 (Xamarin.Forms)”模板创建的。标签出现了,但当我旋转表圈时它没有更新。
我尝试过的另一种方法是使用 CircleStepper
,但我不知道如何自定义它使用的文本的大小和格式,或者如何让它响应边框旋转而无需必须先点击。我也不太喜欢对焦时它背后的小阴影,所以如果没有必要我宁愿不使用它。
我创建了空的可穿戴项目并添加了您的代码。就我而言,它按预期工作。
请尝试从模板 Tizen Wearable App 创建空项目并添加您的代码片段。您可能需要在该空项目中更新 CircularUI nuget。
更新:
旋转事件未传送的原因是“空白应用程序 (Xamarin.Forms)”模板没有开箱即用的 CircularUI。除了添加 CircularUI nuget 外,还需要在 Main 方法中添加初始化:
static void Main(string[] args)
{
var app = new Program();
Forms.Init(app);
//This is the missing initialization code
global::Tizen.Wearable.CircularUI.Forms.FormsCircularUI.Init();
app.Run(args);
}
我正在尝试为 Galaxy Watch 开发一个简单的应用程序,其中包括一个使用可旋转表圈递增和递减的计数器,但我无法让它响应旋转事件。我创建了一个实现 BezelInteractionPage
的页面和一个简单的 class,其中包含实现 IRotaryEventReceiver
的计数器,并在检测到旋转事件时更新 Label
,并设置页面的RotaryFocusObject
到后者 class 的一个实例,我认为这反映了 Tizen.CircularUI GitHub repo 中的一个示例所做的事情。这是我的代码:
public class MainPage : BezelInteractionPage
{
public MainPage()
{
Label text = new Label
{
Text = "0"
};
var proxy = new RotaryFocusProxy(text);
Content = new StackLayout
{
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
Children =
{
text
}
};
RotaryFocusObject = proxy;
}
}
class RotaryFocusProxy : IRotaryEventReceiver
{
private int x;
private Label label;
public RotaryFocusProxy(Label l)
{
x = 0;
label = l;
}
public void Rotate(RotaryEventArgs args)
{
if (args.IsClockwise)
x++;
else
x--;
label.Text = x.ToString();
}
}
除了主要的 class,这是项目中唯一的文件,它是我从“空白应用程序 (Xamarin.Forms)”模板创建的。标签出现了,但当我旋转表圈时它没有更新。
我尝试过的另一种方法是使用 CircleStepper
,但我不知道如何自定义它使用的文本的大小和格式,或者如何让它响应边框旋转而无需必须先点击。我也不太喜欢对焦时它背后的小阴影,所以如果没有必要我宁愿不使用它。
我创建了空的可穿戴项目并添加了您的代码。就我而言,它按预期工作。
请尝试从模板 Tizen Wearable App 创建空项目并添加您的代码片段。您可能需要在该空项目中更新 CircularUI nuget。
更新:
旋转事件未传送的原因是“空白应用程序 (Xamarin.Forms)”模板没有开箱即用的 CircularUI。除了添加 CircularUI nuget 外,还需要在 Main 方法中添加初始化:
static void Main(string[] args)
{
var app = new Program();
Forms.Init(app);
//This is the missing initialization code
global::Tizen.Wearable.CircularUI.Forms.FormsCircularUI.Init();
app.Run(args);
}