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