我正在尝试为Android制作指南针应用程序,正如许多其他人在我之前所做的那样.
但是,我在理解整个旋转矩阵事物应该如何工作时遇到了问题.我已经尝试了前进的方法,并提出了以下代码:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so …Run Code Online (Sandbox Code Playgroud) 我正在开发一款使用Android传感器的应用程序,以帮助车辆在室内导航.作为我对不同传感器的评估过程的一部分,我想尝试"旋转矢量"传感器.由于各种原因,磁场读数对我的位置不是很有用,因此我想尝试"游戏旋转矢量"传感器(传感器融合,可从API级别18及更高版本获得).该描述表明它与常规旋转矢量传感器相同,除了没有使用磁场信息来校正垂直轴周围的陀螺仪漂移.
在寻找有关旋转矢量传感器的信息时,我发现了Google的一个示例,他们使用3d立方体显示旋转矢量传感器.它工作得很好,除了对局部磁场非常敏感(我远北,更糟糕的是,因为这里的水平分量非常小).
由于长期漂移可以通过其他参考数据(地图信息)进行补偿,我想为我的应用程序使用游戏旋转矢量传感器.但是,在示例代码中将所有引用从"TYPE_ROTATION_VECTOR"更改为"TYPE_GAME_ROTATION_VECTOR"时,立方体不再对围绕垂直轴的旋转作出反应(例如,我旋转我的椅子,将设备放在我面前).在另外两个方向上倾斜设备移动了立方体.我也注意到这次立方体更加"迟钝",对任何运动反应都非常缓慢.
这是游戏旋转矢量传感器应该工作的方式(例如,忽略任何Z轴旋转)?这是有道理的,因为在后排座位上玩的游戏玩家不应该受到车辆转弯的影响,但同时它与Google提供的描述(我的第一个链接)不同.根据描述,我的印象是它会慢慢漂移,而不是忽略所有的旋转.
对于这个问题的任何意见,我将深表感谢.
最好的祝福,
约翰
在处理一个更大的项目时,我想显示一个带有时间延迟的 String 数组的所有元素(以便用户可读)。
在我的示例中,我有一个StringBuilder text在选项卡上拆分并存储在String[] words.
我最初的想法是使用类似的东西:
String[] words = text.toString().split("\t");
for (String word : words) {
textView.setText(word);
SystemClock.sleep(2000);
}
Run Code Online (Sandbox Code Playgroud)
但是,这会阻塞 UI 线程,因此只显示最后一个值。在阅读更多之后,我想出了这个解决方案(有效):
final String[] words = text.toString().split("\t");
final Handler handler = new Handler();
handler.post(new Runnable(){
@Override
public void run() {
textView.setText(words[i]);
i++;
if(i < words.length) {
handler.postDelayed(this, TIME_DELAY_MS);
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是,这要求我将其i作为类的私有变量(在与处理程序相同的范围内声明它会强制它是最终的,为了遍历数组而不能这样做)。
为了这个目的而拥有一个类的私有变量似乎非常不雅 - 有没有更好的方法来做到这一点,我错过了?