java - Android: ListView 中的指南针+距离

标签 java android listview gps distance

我想你们都尝试过 map 中的“Google Places”。 这是您附近的 POI 列表。

我真的很想在我的应用程序中使用 GPS 坐标列表来实现相同的功能,但这看起来真的很复杂。

制作带有距离和小箭头的 ListView 非常容易,但我无法理解每次用户移动手机时如何更新此列表和箭头。

现在我有一个静态 ListView 。

alt text

我想知道是否有人成功创建了这样的 ListView 。

非常感谢任何信息。

最佳答案

对于您要实现的目标,有几个选项。就我个人而言,我建议实现您自己的适配器(在本例中最有可能通过扩展 SimpleCursorAdapter)并将对距离文本和罗盘航向旋转的更新封装在其中。

为了帮助进行资源管理,您可能希望在将承载 ListView 的 Activity 中创建 SensorListener 和 LocationListener。每当您收到更新时,请从您的 Adapter 类中调用您自滚动的 updateCompassAndLocation 方法。

在该方法中,您有两个选择。迭代构成所表示的数据集合的每个项目并修改罗盘图形和距离文本,或者简单地将当前位置和航向记录为类中的变量,并调用 notifyDataSetChanged 强制适配器在 getView 方法中更新 View 本身。在任何一种情况下(尤其是后者),您都需要在 getView 中设置距离文本和航向罗盘值。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  LinearLayout myView;

  MyPOI item = getItem(position);

  Location poiLocation = item.getLocation;

  int compassHeading = // Calculate heading relative to current heading
  float distance = // Calculate distance to POI


  if (convertView == null) {
    myView = new LinearLayout(getContext());
    String inflater = Context.LAYOUT_INFLATER_SERVICE;
    LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater);
    vi.inflate(resource, myView, true);
  } else {
    trainView = (LinearLayout) convertView;
  }

  TextView distanceView = (TextView)trainView.findViewById(R.id.distance);
  ImageView compassView = (ImageView)trainView.findViewById(R.id.compass);

  distanceView.setText(String.valueOf(distance);
  compassView.setImageLevel(compassHeading);
}

关于java - Android: ListView 中的指南针+距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833654/

相关文章:

java - 防止仅由用户调整 TableColumn 的大小

java - 检查数组列表中的空字符串

java - 为什么 SwitchCompat 不能在 Android Studio 上运行?

android - 如何从服务器查看 mp3 文件的 ListView

安卓 : At a time only one item isChecked in listview with checkboxes

android - 如何解决 ListView 布局和 IME 预测文本之间的竞争条件

java - 许可证 key 生成器冲突概率

java - 如何编写包含签名的 .RSA 文件(使用 Java)

android - 使用 Network.getAllByName 执行特定于网络的主机名解析

android 在 tabbedActivity 中禁用/启用选项卡