我正在尝试在SM-R800 tizen-wearable app 4.0(三星Galaxy手表)上设置应用程序,除了显示环境光和环境压力之外,它还会在注册时显示水龙头。 (这是在C#中完成的)
我已经尝试使用Window
类来尝试传递我的触摸事件参数,因为根据可用的Tizen文档,似乎“View”类不能执行此操作。
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
// using ElmSharp; can't be used because it is redundant with Xamarin forms namespace
using Xamarin.Forms;
using Tizen.Wearable.CircularUI.Forms;
using Tizen.Sensor;
using Tizen.NUI;
namespace TizenWearableApp6
{
public class App : Application
{
LightSensor sensor;
Label textlabel;
PressureSensor sensor2;
Label barometer_label;
//Touch touch;
public Vector2 startPos;
public Vector2 direction;
//Label m_Text;
protected override void OnStart()
{
//base.OnCreate();
//Initialize();
}
public App()
{
/*
Window window = Window.Instance;
window.TouchEvent += WindowTouched;
//touch = new Touch(); //this line has to be in a method like "public App()"
m_Text = new Label
{
HorizontalTextAlignment = TextAlignment.Center
};
void WindowTouched(object sender, Window.TouchEventArgs e)
{
m_Text.Text = "I have been touched!";
} */
if (PressureSensor.IsSupported)
{
sensor2 = new PressureSensor(); //instantiate HERE
barometer_label = new Label
{
HorizontalTextAlignment = TextAlignment.Center
};
sensor2.Start(); //Barometer sensor
sensor2.DataUpdated += OnDataUpdated2; //Subscribed event handler (OnDataUpdated2) to event (DataUpdated)
void OnDataUpdated2(object sender, PressureSensorDataUpdatedEventArgs e) // event handler for humidity
{
barometer_label.Text = "Ambient pressure Level: " + e.Pressure;
}
}
else
{
barometer_label = new Label()
{
HorizontalTextAlignment = TextAlignment.Center,
Text = "Does not exist"
};
}
//-----------------Light Sensor------------------------
sensor = new LightSensor(); //"new" because I'm instantiaing a new object of the light sensor class
textlabel = new Label
{
HorizontalTextAlignment = TextAlignment.Center
};
sensor.Start(); //Light sensor
sensor.DataUpdated += OnDataUpdated1; //Subscribed event handler (OnDataUpdated1) to event (DataUpdated)
void OnDataUpdated1(object sender, LightSensorDataUpdatedEventArgs e) //event handler
{
textlabel.Text = "Light level: " + e.Level;
}
// The root page of your application
MainPage = new CirclePage
{
Content = new StackLayout
{
VerticalOptions = LayoutOptions.Center,
Children = {
textlabel,
barometer_label,
//m_Text
}
}
};
}
/* protected override void OnStart()
{
// Handle when your app starts
} */
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
使用上面的代码,我注释掉了我正在尝试的东西(失败)并且只留下了我的代码部分。我希望看到环境光线,压力的实时更新,并期待一个字母“我被感动了!”每次我点击手表。
我实际得到的,(假设我只是使用上面的内容)是环境光和环境压力的实时更新,但是当我取消注释我的Window
类的东西然后我得到一个“Out of frame”错误,如果我只是取消注释我的标签m_Text
在VerticalOptions
的两个孩子中,当我声明“Label m_Text”然后我得到分段错误错误。
请注意,一些评论可能看起来是随意的,因为我留下了我以前尝试过的一些东西,并不一定意味着我一次都没有注释。
最后,知道我是C#,Tizen和Microsoft Visual Studio的完全新手可能会很好,所以我肯定会问很多非常初级的问题。
从错误理解开始,构建Tizen .NET应用程序UI时可以使用许多不同的API。到目前为止,有些文件没有很好地记录在案。举几个例子(我们在VisualStudio新项目窗口中可以看到):
那么让我们回到这个问题。由于您的项目基于Xamarin.Forms(和Tizen.Wearable.CircularUI),您可能需要从官方网站引用this guide来处理用户手势。例如,您可以按如下方式将TapGestureRecognizer实例注册到StackLayout组件(而不必导入Tizen.NUI API)。
var layout = new StackLayout
{
VerticalOptions = LayoutOptions.Center,
Children = { textlabel, barometer_label, m_Text }
};
TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (sender, e) =>
{
m_Text.Text = "I have been touched!";
};
layout.GestureRecognizers.Add(tapGestureRecognizer);
MainPage = new CirclePage
{
Content = layout
};
我希望它有助于开发可穿戴应用程序。