我是新手,我需要一些帮助。想找到与我的问题相似的东西,但我无法修复它。 我发现了一个带有3轴(X,Y,Z)的加速器的代码,我试图添加一个按钮来停止这个过程并“记录”这三个值(只是为了阻止它们)。谁能帮我?
这是代码:
package course.examples.Sensors.ShowValues;
public class SensorRawAccelerometerActivity extends Activity implements
SensorEventListener {
private static final int UPDATE_THRESHOLD = 500;
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private TextView mXValueView, mYValueView, mZValueView;
private long mLastUpdate;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mXValueView = (TextView) findViewById(R.id.x_value_view);
mYValueView = (TextView) findViewById(R.id.y_value_view);
mZValueView = (TextView) findViewById(R.id.z_value_view);
// Get reference to SensorManager
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// Get reference to Accelerometer
if (null == (mAccelerometer = mSensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)))
finish();
}
// Register listener
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mAccelerometer,
SensorManager.SENSOR_DELAY_UI);
mLastUpdate = System.currentTimeMillis();
}
// Unregister listener
@Override
protected void onPause() {
mSensorManager.unregisterListener(this);
super.onPause();
}
// Process new reading
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long actualTime = System.currentTimeMillis();
if (actualTime - mLastUpdate > UPDATE_THRESHOLD) {
mLastUpdate = actualTime;
float x = event.values[0], y = event.values[1], z = event.values[2];
mXValueView.setText(String.valueOf(x));
mYValueView.setText(String.valueOf(y));
mZValueView.setText(String.valueOf(z));
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// N/A
}
main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/x_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:padding="5dp"
android:text="@string/raw_x_string"
android:textSize="24sp" />
<TextView
android:id="@+id/y_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/x_value"
android:padding="5dp"
android:text="@string/raw_y_string"
android:textSize="24sp" />
<TextView
android:id="@+id/z_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/y_value"
android:padding="5dp"
android:text="@string/raw_z_string"
android:textSize="24sp" />
<TextView
android:id="@+id/x_value_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/x_value"
android:padding="5dp"
android:textSize="24sp" />
<TextView
android:id="@+id/y_value_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/x_value_view"
android:layout_toRightOf="@+id/y_value"
android:padding="5dp"
android:textSize="24sp" />
<TextView
android:id="@+id/z_value_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/y_value_view"
android:layout_toRightOf="@+id/z_value"
android:padding="5dp"
android:textSize="24sp" />
</RelativeLayout>
非常感谢你! 最好的问候!
答案 0 :(得分:0)
首先使用属性
为XML文件添加一个按钮android:onClick="myMethodName"
在您的活动中创建一个新的私有布尔变量,以跟踪您是否正在更新(在这种情况下,我称之为更新)。修改您的活动以包括:
public void myMethodName(View v)
{
//if updating, stop updating. if not updating, start updating
updating = !updating;
}
只要按下按钮,就会调用此方法。此方法的名称必须与您在XML中的onClick字段中放置的内容相匹配。最后,将onSensorChanged方法修改为如下所示:
onSensorChanged(Event e)
{
if(updating)
{
//do everything else you already do here
}
}
现在它会更新,直到按下按钮,此时它将停止更新,但会继续显示最后一个值,直到再次按下该按钮。