У меня есть список объектов, где каждый объект содержит свою координату позиции (широта, долгота), как показано ниже,
ArrayList<Person> friends = new ArrayList<Person>();
Person person = new Person("Alex",42.387310,-101.423977);
friends.add(person );
Я показываю список в RecyclerView
, который работает нормально, но мне нужно показать этот список в группах. Например, если есть список из 10 человек, и двое из них близки друг к другу, как тогда, сделайте группу из этих двух.
Я могу найти расстояние от их lat - long , но я не знаю, как создать группу на таком расстоянии. Мне также нужен уникальный цвет фона для каждой группы, т.е. когда расстояние между двумя или более людьми составляет менее 50 метров, чем создать группу из этого объекта и визуализировать этот элемент с этим фоновым цветом
Текущий адаптер
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private ArrayList<NearMe> mDataset;
public class MyViewHolder extends RecyclerView.ViewHolder {
View mView;
public MyViewHolder(View itemView) {
super(itemView);
mView = itemView;
FrameLayout group_countx = (FrameLayout) mView.findViewById(R.id.count_badge);
group_countx.setVisibility(View.INVISIBLE);
}
public void setTitle(String title) {
String output = title.substring(0, 1).toUpperCase() + title.substring(1);
TextView post_title = (TextView) mView.findViewById(R.id.name);
post_title.setText(output);
}
}
public MyAdapter(ArrayList<NearMe> myDataset) {
mDataset = myDataset;
}
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.contact_row, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Double Latitude = mDataset.get(position).getLatitude();
Double Longitude = mDataset.get(position).getLongitude();
holder.setTitle(mDataset.get(position).getName());
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return mDataset.size();
}
}
Пример вывода
Изменить 2 У меня есть создал метод, который добавляет тот же фон, если они ближе, но это также добавляет цвет к отдельным строкам
моя функция
for (int i = 0; i < nearByFriends.size(); i++) {
String groupID = "group_"+i;
Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
NearMe f1 = nearByFriends.get(i);
for (int ii = 0; ii < nearByFriends.size(); ii++) {
NearMe f2 = nearByFriends.get(ii);
Double d = SharedHelper.distance(f1.getLatitude(), f1.getLongitude(),f2.getLatitude(), f2.getLongitude(), 'K');
if(d <= 0.1) {
nearByFriends.get(i).setColor(color);
nearByFriends.get(ii).setColor(color);
nearByFriends.get(i).setNearby(true);
nearByFriends.get(ii).setNearby(true);
}
}
}