我试图在1秒内获得100个加速度计读数,但不是100个不同的读数,它给了我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?我该如何解决这个问题?
干杯
答案 0 :(得分:0)
尝试使用
过滤onSensorChanged函数中的结果@Override
public void onSensorChanged(SensorEvent event)
{
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
ax = event.values[0];
}
}
答案 1 :(得分:0)
我找到了一种绕过循环冻结onSensorChanged()的方法!
我基本上必须在runnables和&#39; flag&#39;的帮助下实现多线程。变量(注意&#39;标志&#39;变量必须静态)。
我将BuildTable()函数放在一个新的Runnable中,然后将其插入到一个线程中。所以有一个主线程(我想用于GUI)和一个单独的线程,必须将其修改为专门接收和存储传感器读数。
然后在主线程中执行这些变量的实际显示(我认为它被称为UIThread),并借助于&#39;标记&#39;我的BuildTable()线程也修改了变量(因此&#39;标志&#39;变量必须是静态)。
我可以添加代码片段以获得更多提示,但也许稍晚或当有人要求时,它有点早上
干杯!