OnSensorChanged() 不改变循环中的值
OnSensorChanged() not changing value in loop
我试图在 1 秒内获得 100 个加速度计读数,但不是 100 个不同的读数,它给了我 1 个相同的读数 100 次。
当我在我的应用程序中按下按钮时,我试图显示这 100 个加速度计读数
我的 MainActivity 有这个名为
的变量
float ax;
这是连续存储加速度计读数(x 轴)的地方。
我的 OnCreate() 方法中有这个按钮代码
button = (Button)findViewById(R.id.startbutton); //inits button
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
BuildTable();
}
});
触发 BuildTable() 函数(在应用程序本身上显示输出)
我的 BuildTable() 有这样的东西
public void BuildTable()
{
TableRow trow = new TableRow(this);
TextView text = new TextView(this);
int count = 0;
while (count < 100)
{
if(System.currentTimeMillis() - lasttime >= 10)
{
lasttime = System.currentTimeMillis();
text = new TextView(this);
Log.d("MyApp","ax is: "+ax);
text.setText(""+ax);
trow = new TableRow(this);
trow.addView(text);
table.addView(trow,count);
count++;
}
}
}
OnSensorChanged() 函数如下所示
@Override
public void onSensorChanged(SensorEvent event) {
ax = event.values[0];
}
这只是更新 ax。
点击按钮如何暂停ax的更新?我该如何解决这个问题?
干杯
尝试使用
在 onSensorChanged 函数中过滤结果
@Override
public void onSensorChanged(SensorEvent event)
{
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
ax = event.values[0];
}
}
我找到了绕过冻结 onSensorChanged() 循环的方法!
我基本上必须借助可运行对象和 'flag' 变量来实现多线程(注意 'flag' 变量必须是 static)。
我将我的 BuildTable() 函数放在一个新的 Runnable 中,然后将其插入到一个线程中。所以有一个主线程(我想用于 GUI)和一个单独的线程,必须对其进行修改以专门接收和存储传感器读数。
然后 table 中这些变量的实际显示是在主线程(我认为它称为 UIThread)中执行的,借助于 'flag' 变量,这些变量也被我修改了BuildTable() 线程(因此 'flag' 变量必须是 static)。
我可以添加代码片段以获得更多提示,但也许稍后或者当有人要求时,时间有点早
干杯!
我试图在 1 秒内获得 100 个加速度计读数,但不是 100 个不同的读数,它给了我 1 个相同的读数 100 次。
当我在我的应用程序中按下按钮时,我试图显示这 100 个加速度计读数
我的 MainActivity 有这个名为
的变量float ax;
这是连续存储加速度计读数(x 轴)的地方。
我的 OnCreate() 方法中有这个按钮代码
button = (Button)findViewById(R.id.startbutton); //inits button
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
BuildTable();
}
});
触发 BuildTable() 函数(在应用程序本身上显示输出)
我的 BuildTable() 有这样的东西
public void BuildTable()
{
TableRow trow = new TableRow(this);
TextView text = new TextView(this);
int count = 0;
while (count < 100)
{
if(System.currentTimeMillis() - lasttime >= 10)
{
lasttime = System.currentTimeMillis();
text = new TextView(this);
Log.d("MyApp","ax is: "+ax);
text.setText(""+ax);
trow = new TableRow(this);
trow.addView(text);
table.addView(trow,count);
count++;
}
}
}
OnSensorChanged() 函数如下所示
@Override
public void onSensorChanged(SensorEvent event) {
ax = event.values[0];
}
这只是更新 ax。
点击按钮如何暂停ax的更新?我该如何解决这个问题?
干杯
尝试使用
在 onSensorChanged 函数中过滤结果@Override
public void onSensorChanged(SensorEvent event)
{
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
ax = event.values[0];
}
}
我找到了绕过冻结 onSensorChanged() 循环的方法!
我基本上必须借助可运行对象和 'flag' 变量来实现多线程(注意 'flag' 变量必须是 static)。
我将我的 BuildTable() 函数放在一个新的 Runnable 中,然后将其插入到一个线程中。所以有一个主线程(我想用于 GUI)和一个单独的线程,必须对其进行修改以专门接收和存储传感器读数。
然后 table 中这些变量的实际显示是在主线程(我认为它称为 UIThread)中执行的,借助于 'flag' 变量,这些变量也被我修改了BuildTable() 线程(因此 'flag' 变量必须是 static)。
我可以添加代码片段以获得更多提示,但也许稍后或者当有人要求时,时间有点早
干杯!