首页 > 解决方案 > Tizen 手表表圈交互

问题描述

我正在尝试为 Galaxy Watch 开发一个简单的应用程序,其中包括一个使用可旋转表圈递增和递减的计数器,但我无法让它响应旋转事件。我创建了一个实现的页面BezelInteractionPage和一个包含计数器的简单类,该计数器在检测到旋转事件时实现IRotaryEventReceiver并更新 a Label,并将页面设置为RotaryFocusObject后一个类的实例,我认为这反映了其中一个类中所做的事情Tizen.CircularUI GitHub 存储库中的示例。这是我的代码:

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

除了主类之外,这是项目中唯一的文件,它是我从“Blank App (Xamarin.Forms)”模板创建的。标签显示出来,但当我旋转挡板时它不会更新。

我尝试过的另一种方法是使用 a CircleStepper,但我不知道如何自定义它使用的文本的大小和格式,或者让它响应边框旋转而无需先点击。我也不太喜欢它在对焦时背后的小阴影,所以如果我不需要的话,我宁愿不使用它。

标签: .nettizentizen-wearable-sdk

解决方案


我创建了空的可穿戴项目并添加了您的代码。就我而言,它按预期工作。

请尝试从模板 Tizen Wearable App 创建空项目并添加您的代码片段。您可能需要在该空项目中更新 CircularUI nuget。

更新:

未交付旋转事件的原因是“Blank App (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);
}

推荐阅读