每 10 秒更改标记相机位置而不刷新 googlemap
changing marker camera position in every 10 seconds without refreshing the googlemap
我目前正在开发一个可以跟踪位置的 Android 应用程序。
我的应用程序有两个部分:
- 更新数据(经度,纬度)到服务器
- 每 10 秒从服务器接收一次数据并在 googlemap(marker)
上显示
我的第一部分已经完成,在第二部分我正在从服务器获取一个值。但是当我 sync
我的地图有新值时,问题就出现了——每次它都会刷新整个地图。
如果有人对如何实现能够 运行 android 应用程序并看到标记动态变化的效果有任何见解,将不胜感激!
public class user_page extends FragmentActivity implements
OnMapReadyCallback {
double longi=0,lati=0;
int id=0;
MapFragment mapFragment;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tim);
try
{
mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
}
catch(Exception e)
{
Log.d("error",e.toString());
}
final Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
new logincheck().execute();
Toast.makeText(getApplicationContext(),"longi = " + longi + "latii = " +lati,Toast.LENGTH_SHORT).show();
h.postDelayed(this, 10000);
}
}, 10000);
}
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng current = new LatLng(longi, lati);
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(current, 13));
googleMap.addMarker(new MarkerOptions()
.title(""+id)
.position(current));
}
// end of class user_page
public class logincheck extends AsyncTask<String, Void, String> {
HashMap<String, String> data;
ArrayList<HashMap<String, String>> dataFromdb;
public logincheck()
{
dataFromdb = new ArrayList<HashMap<String, String>>();
}
@Override
protected String doInBackground(String... params) {
id = getIntent().getIntExtra("id",0);
StringBuilder result = new StringBuilder("");
String line ="";
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet("mylink?id=" +id);
try
{
HttpResponse responce = client.execute(httpget);
BufferedReader in = new BufferedReader(new InputStreamReader(responce.getEntity().getContent()));
while((line= in.readLine()) != null)
{
result.append(line);
}
in.close();
}
catch(Exception e)
{
Log.e("error in do in background", e.getMessage());
}
return result.toString();
}
protected void onPostExecute(String result) {
ArrayList<HashMap<String, String>> mydata = parseJson(result);
for(int i=0;i < mydata.size();i++)
{
longi = Double.parseDouble(mydata.get(i).get("logi"));
lati = Double.parseDouble(mydata.get(i).get("lati"));
}
try {
mapFragment.getMapAsync(user_page.this);
}
catch(Exception e)
{
Log.d("error",e.toString());
}
}
private ArrayList<HashMap<String, String>> parseJson(String stringdata)
{
dataFromdb.clear();
try
{
JSONArray jsonarray = new JSONArray(stringdata);
JSONObject jsondata = null;
for(int i=0;i<jsonarray.length();i++)
{
NumberFormat n = NumberFormat.getInstance();
data = new HashMap<String, String>();
jsondata = jsonarray.getJSONObject(i);
data.put("logi",jsondata.getString("logi"));
data.put("lati",jsondata.getString("lati"));
dataFromdb.add(data);
}
}
catch(JSONException e)
{
Log.e("error in parsing ",e.getMessage());
}
return dataFromdb;
}
}
}
尝试使用
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 13));
当您收到新的纬度和经度时。这应该从当前位置平滑地动画到新位置
我目前正在开发一个可以跟踪位置的 Android 应用程序。 我的应用程序有两个部分:
- 更新数据(经度,纬度)到服务器
- 每 10 秒从服务器接收一次数据并在 googlemap(marker) 上显示
我的第一部分已经完成,在第二部分我正在从服务器获取一个值。但是当我 sync
我的地图有新值时,问题就出现了——每次它都会刷新整个地图。
如果有人对如何实现能够 运行 android 应用程序并看到标记动态变化的效果有任何见解,将不胜感激!
public class user_page extends FragmentActivity implements
OnMapReadyCallback {
double longi=0,lati=0;
int id=0;
MapFragment mapFragment;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tim);
try
{
mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
}
catch(Exception e)
{
Log.d("error",e.toString());
}
final Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
new logincheck().execute();
Toast.makeText(getApplicationContext(),"longi = " + longi + "latii = " +lati,Toast.LENGTH_SHORT).show();
h.postDelayed(this, 10000);
}
}, 10000);
}
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng current = new LatLng(longi, lati);
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(current, 13));
googleMap.addMarker(new MarkerOptions()
.title(""+id)
.position(current));
}
// end of class user_page
public class logincheck extends AsyncTask<String, Void, String> {
HashMap<String, String> data;
ArrayList<HashMap<String, String>> dataFromdb;
public logincheck()
{
dataFromdb = new ArrayList<HashMap<String, String>>();
}
@Override
protected String doInBackground(String... params) {
id = getIntent().getIntExtra("id",0);
StringBuilder result = new StringBuilder("");
String line ="";
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet("mylink?id=" +id);
try
{
HttpResponse responce = client.execute(httpget);
BufferedReader in = new BufferedReader(new InputStreamReader(responce.getEntity().getContent()));
while((line= in.readLine()) != null)
{
result.append(line);
}
in.close();
}
catch(Exception e)
{
Log.e("error in do in background", e.getMessage());
}
return result.toString();
}
protected void onPostExecute(String result) {
ArrayList<HashMap<String, String>> mydata = parseJson(result);
for(int i=0;i < mydata.size();i++)
{
longi = Double.parseDouble(mydata.get(i).get("logi"));
lati = Double.parseDouble(mydata.get(i).get("lati"));
}
try {
mapFragment.getMapAsync(user_page.this);
}
catch(Exception e)
{
Log.d("error",e.toString());
}
}
private ArrayList<HashMap<String, String>> parseJson(String stringdata)
{
dataFromdb.clear();
try
{
JSONArray jsonarray = new JSONArray(stringdata);
JSONObject jsondata = null;
for(int i=0;i<jsonarray.length();i++)
{
NumberFormat n = NumberFormat.getInstance();
data = new HashMap<String, String>();
jsondata = jsonarray.getJSONObject(i);
data.put("logi",jsondata.getString("logi"));
data.put("lati",jsondata.getString("lati"));
dataFromdb.add(data);
}
}
catch(JSONException e)
{
Log.e("error in parsing ",e.getMessage());
}
return dataFromdb;
}
}
}
尝试使用
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 13));
当您收到新的纬度和经度时。这应该从当前位置平滑地动画到新位置