gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:42 26 4
gpt4 key购买 nike

我想你们都尝试过 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com