【发布时间】:2013-06-01 23:09:15
【问题描述】:
我正在开发一个应用程序,我需要在其中根据设备倾斜信息进行文本滚动。我尝试了一些解决方案,但似乎没有任何效果。我可以使用以下代码获取倾斜信息:-
public class SensorActivity extends Activity implements SensorEventListener {
float[] mMagnetValues = new float[3];
float[] mAccelValues = new float[3];
float[] mOrientationValues = new float[3];
float[] mRotationMatrix = new float[9];
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SensorManager sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_NORMAL);
TextView txt1 = (TextView) findViewById(R.id.textView1);
}
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mAccelValues, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, mMagnetValues, 0, 3);
break;
}
SensorManager.getRotationMatrix(mRotationMatrix, null, mAccelValues, mMagnetValues);
SensorManager.getOrientation(mRotationMatrix, mOrientationValues);
Log.e("Values", mOrientationValues[0] + " " + mOrientationValues[1] + " " + mOrientationValues);
};
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) { }
public void scrollTextUp() {
ScrollView scrollView = (ScrollView)findViewById(R.id.scroll);
scrollView.scrollBy(0, 5);
}
public void scrollTextBottom() {
ScrollView scrollView = (ScrollView)findViewById(R.id.scroll);
scrollView.scrollBy(0, -5);
}
}
我认为mOrientationValues[1] 需要用于滚动,但如何使用这个值对我来说是个大问题。请帮忙。
任何帮助将不胜感激。如果您发现任何好的教程或示例,请分享。
谢谢。
【问题讨论】:
-
也许可以改为 scrollTo (int x, int y)?
-
是的,我想这样会更好,因为 scrollBy 会继续滚动文本。但最大的问题是如何使用传感器值来计算滚动视图的新 y?
-
所有值的范围都是从 1 到 -1 对吧?我的电脑坏了,明天修好
-
我说它与单位圆、角度和切线有关,与滚动视图的完整长度一致
-
-1 到 1 倍我认为的滚动视图的完整长度
标签: android scroll textview accelerometer tilt