草庐IT

android - 在android中滚动谷歌地图v2时获取 map 中心点?

coder 2023-12-10 原文

您好,我正在做一个应用程序,在我的应用程序中有一个 map 页面,所以我实现了 Google Maps V2,我遇到了一个问题,当我滚动 map 时,我想获得 map 的中心点,如果我滚动 map ,我离开它然后它得到 map 的中心点所以任何人都可以建议解决这个问题它可能会有所帮助提前谢谢你......

注意:我使用过 Google Maps V2,所以请发布相关信息。

public class Mapview extends FragmentActivity implements OnMapClickListener, OnCameraChangeListener{

final int RQS_GooglePlayServices = 1;
private GoogleMap myMap;
Location myLocation;
TextView tvLocInfo;
GPSTracker gps;
public double Latitude,Longitude;
String Datetime, addr,RegUID;
public String lat,longd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);

    tvLocInfo = (TextView)findViewById(R.id.locinfo);

    FragmentManager myFragmentManager = getSupportFragmentManager();
    SupportMapFragment mySupportMapFragment = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);

    myMap = mySupportMapFragment.getMap();

    myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    myMap.setMyLocationEnabled(true);
    myMap.setOnMapClickListener(this);
    Projection P = myMap.getProjection();
    Log.e("lat", String.valueOf(Latitude));
    Log.e("lat", String.valueOf(Longitude));
    Button mDone = (Button) findViewById(R.id.button1);         
    mDone.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("SimpleDateFormat")
        public void onClick(View v) {

            //Toast.makeText(getBaseContext(), "latitude"+lat+""+"longitude"+longd , Toast.LENGTH_LONG).show();
            String timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());                
            Datetime = timeStamp.toString();
            Log.e("t", Datetime);               
            RegUID = Utils.RegisterUserId;
            Log.e("t", RegUID);
            final ProgressDialog dialog = ProgressDialog.show(Mapview.this, "", Utils.Loading, true);
            dialog.show();
            Handler handler = new Handler();
            handler.postDelayed(new Runnable(){
                @SuppressWarnings("unused")
                public void run()
                {
                    try
                    {
                        String EMPLOYEE_SERVICE_URI = Utils.Request+"UserID="+RegUID+"&Location="+URLEncoder.encode(addr,"UTF-8")+"&Latitude="+lat+"&Longitude="+longd+"&RequestDate="+URLEncoder.encode(Datetime,"UTF-8");
                        Log.e(EMPLOYEE_SERVICE_URI, EMPLOYEE_SERVICE_URI);
                        JSONObject JObject = Utils.getResult(EMPLOYEE_SERVICE_URI);
                        //Toast.makeText(Mapview.this,JObject.toString(), Toast.LENGTH_LONG).show();
                        if(JObject!=null)
                        {     

                            if(JObject.getBoolean("Valid"))
                            {

                                AlertDialog alertDialog = new AlertDialog.Builder(Mapview.this).create();
                                Utils.callAlert(JObject.getString("Message"), alertDialog);

                            }
                            else
                            {
                                AlertDialog alertDialog = new AlertDialog.Builder(Mapview.this).create();
                                Utils.callAlert(JObject.getString("Message"), alertDialog);
                            }

                        }
                        else
                        {
                            AlertDialog alertDialog = new AlertDialog.Builder(Mapview.this).create();
                            Utils.callAlert(JObject.getString("Message"), alertDialog);
                        }
                    }
                    catch (Exception e)
                    {
                        //Toast.makeText(Mapview.this,e.toString(), Toast.LENGTH_LONG).show();
                        Log.e("Exception", e.toString());
                    }
                    dialog.dismiss();
                }//run() ends  
            }, 5000);               


        }
    });


}

@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
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());

    if (resultCode == ConnectionResult.SUCCESS){
        Toast.makeText(getApplicationContext(), 
                "isGooglePlayServicesAvailable SUCCESS", 
                Toast.LENGTH_LONG).show();
    }else{
        GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices);
    }

}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    Log.i("test","onScroll");
    return false;
}
@Override
public void onMapClick(LatLng point) {
    Log.e("lat", String.valueOf(point.latitude));
    Log.e("lat", String.valueOf(point.longitude));
    Latitude =point.latitude;
    Longitude = point.longitude;
    lat = String.valueOf(point.latitude);
    longd = String.valueOf(point.longitude);        
    myMap.moveCamera(CameraUpdateFactory.newLatLng(point));
    gps = new GPSTracker(Mapview.this);
    // check if GPS enabled     
    if(gps.canGetLocation())
    {   

        Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
        try {
            List<Address> addresses = geoCoder.getFromLocation(Latitude, Longitude, 1);
            if(addresses != null) {
                Address returnedAddress = addresses.get(0);
                StringBuilder strReturnedAddress = new StringBuilder("");
                for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
                    strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");  
                }
                addr = new String(strReturnedAddress);
                tvLocInfo.setText(addr.toString());

                //Toast.makeText(getApplicationContext(), addr.toString(),Toast.LENGTH_LONG).show();
            }
            else
            {
                Toast.makeText(getApplicationContext(), "Gps location address is unavailable please try again later",
                        Toast.LENGTH_LONG).show();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block

            e.printStackTrace();
        }
    }
}

@Override
public void onCameraChange(CameraPosition arg0) {
    // TODO Auto-generated method stub

}

 }

最佳答案

您可以使用:-

myMap.setOnCameraChangedListener(this);

在监听器中:-

onCameraChange(CameraPosition position) {
    LatLng target = position.target;
    // do what you need with the position here
}

我不确定索引是否越界。但是要设置默认 map 位置,您可以使用如下内容:-

    private void setDefaultMapPosition(LatLng latLng) {

    CameraPosition camPos =
            new CameraPosition.Builder().target(latLng)
            .zoom(A_DEFAULT_MAP_ZOOM)
            .bearing(0)
            .tilt(0)
            .build();

    myMap.moveCamera(
            CameraUpdateFactory.newCameraPosition(camPos));

   }

关于android - 在android中滚动谷歌地图v2时获取 map 中心点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15847631/

有关android - 在android中滚动谷歌地图v2时获取 map 中心点?的更多相关文章

  1. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  2. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  3. ruby - 在 ruby​​ 中使用 .try 函数和 .map 函数 - 2

    我需要从json记录中获取一些值并像下面这样提取curr_json_doc['title']['genre'].map{|s|s['name']}.join(',')但对于某些记录,curr_json_doc['title']['genre']可以为空。所以我想对map和join()使用try函数。我试过如下curr_json_doc['title']['genre'].try(:map,{|s|s['name']}).try(:join,(','))但是没用。 最佳答案 你没有正确传递block。block被传递给参数括号外的方法

  4. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

    如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

  5. ruby - 不能将 `each` 的所有或大多数情况替换为 `map` 吗? - 2

    Enumerable#each和Enumerable#map的区别在于返回的是接收者还是映射后的结果。回到接收者是微不足道的,你通常不需要在each之后继续一个方法链,比如each{...}.another_method(我可能没见过这样的案例。即使你想回到接收者那里,你也可以通过tap来实现)。所以我认为所有或者大部分使用Enumerable#each的情况都可以用Enumerable#map代替。我错了吗?如果我是对的,each的目的是什么?map是否比each慢?编辑:我知道当您对返回值不感兴趣时​​使用each是一种常见的做法。我对这种做法是否存在不感兴趣,但感兴趣的是,除了从

  6. ruby - `map` 比 `each` 快吗? - 2

    map遍历数组是否比each更快?两者有速度差异吗?mapresult=arr.map{|a|a+2}每个result=[]arr.eachdo|a|result.push(a+2)end 最佳答案 我认为是的。我试过这个测试require"benchmark"n=10000arr=Array.new(10000,1)Benchmark.bmdo|x|#Mapx.reportdon.timesdoresult=arr.map{|a|a+2}endend#Eachx.reportdon.timesdoresult=[]arr.each

  7. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

  8. ruby - 用于 Ruby 哈希的 map_values()? - 2

    我想念Ruby中的Hash方法来仅转换/映射散列值。h={1=>[9,2,3,4],2=>[6],3=>[5,7,1]}h.map_values{|v|v.size}#=>{1=>4,2=>1,3=>3}你如何在Ruby中归档它?更新:我正在寻找map_values()的实现。#moreexamplesh.map_values{|v|v.reduce(0,:+)}#=>{1=>18,2=>6,3=>13}h.map_values(&:min)#=>{1=>2,2=>6,3=>1} 最佳答案 Ruby2.4引入了方法Hash#tran

  9. ruby - 了解 Ruby Enumerable#map(具有更复杂的 block ) - 2

    假设我有一个函数defodd_or_evennifn%2==0return:evenelsereturn:oddendend我有一个简单的可枚举数组simple=[1,2,3,4,5]然后我用我的函数在map中运行它,使用一个do-endblock:simple.mapdo|n|odd_or_even(n)end#=>[:odd,:even,:odd,:even,:odd]如果不首先定义函数,我怎么能做到这一点?例如,#doesnotworksimple.mapdo|n|ifn%2==0return:evenelsereturn:oddendend#Desiredresult:#=>[

  10. ruby - 将 each_with_index 与 map 一起使用 - 2

    我想获取一个数组并将其作为订单列表。目前我正在尝试以这种方式进行:r=["a","b","c"]r.each_with_index{|w,index|puts"#{index+1}.#{w}"}.map.to_a#1.a#2.b#3.c#=>["a","b","c"]输出应该是["1.a","2.b","3.c"]。如何让正确的输出成为r数组的新值? 最佳答案 a.to_enum.with_index(1).map{|element,index|"#{index}.#{element}"}或a.map.with_index(1){|

随机推荐