проблема просмотра карты Android - PullRequest
1 голос
/ 24 мая 2011

В моем приложении я использую вид карты, который показывает пятна рядом с моим текущим местоположением. Если пользователь нажимает на кнопку на карте, я показываю подробную информацию об этом месте. Для отображения деталей я использовал некоторую анимационную часть.

в том, что когда пользователь нажимает на скрытую анимацию, я хочу снова показать предыдущую карту. Для отображения анимации я установил вид содержимого, и снова, когда пользователь нажимает на скрытую анимацию, я вызываю функцию из основного действия (ссоздать)

поэтому, когда я вызываю эту функцию, это дает мне исключение нулевого указателя при просмотре карты.пожалуйста помогите !!!

вот мой код

@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        //      searchButton=(Button)findViewById(R.id.searchId);
        //      searchButton.setOnClickListener(this);
        //      nearestButton=(Button)findViewById(R.id.nearestId);
        //      nearestButton.setOnClickListener(this);

        url1=ongetUrl();
        new FetchTask(FindFishActivity.this, url1).execute(null);
    }

    private class FetchTask extends AsyncTask<Object,Object,Object>
    {
        ProgressDialog progressDialog;
        Context ctx;
        String str_url;

        public FetchTask(Context mcontext,String str) 
        {
            this.ctx=mcontext;
            this.str_url=str;

        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog=ProgressDialog.show(FindFishActivity.this,"Loading Data","Please wait...");       
        }

        @Override
        protected Object doInBackground(Object... params) 
        {

            String res_str=onWebService(str_url);
            parse(res_str);

            return true;
        }

        @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);
            onMapDisplay();
            progressDialog.dismiss();
        }


public void onMapDisplay() {
        String lakeNameString;
        setContentView(R.layout.mapview);

        mapView=(MapView)findViewById(R.id.mapview);
//      if(mapView==null)
//      {
//          MapView view=new MapView(FindFishActivity.this,"0pPZGIF27HwAISdkPQhUWYj12n5N63e-vAbun1g");
//          setContentView(R.layout.mapview);
//      }

        mapView.setStreetView(true);
        mapView.setSatellite(false);
        mapController = mapView.getController();
        mapView.setBuiltInZoomControls(true);
        mapOverlays=mapView.getOverlays();
        drawable=FindFishActivity.this.getResources().getDrawable(R.drawable.pushpin4);
        myOverlays=new MyOverlays(drawable,FindFishActivity.this);
        for(int i=0;i<latitude.size();i++)
        {
            if(!latitude.get(i).equals("")) 
            {
                lat=Double.parseDouble(latitude.get(i));
                latitudearr.add(lat);
            }
        }
        for(int i=0;i<longitude.size();i++)
        {
            if(!longitude.get(i).equals(""))    
            {
                lon=Double.parseDouble(longitude.get(i));
                longitudearr.add(lon);
            }
        }
        for(int i=0;i<lakeNameList.size();i++)
        {
            if(!lakeNameList.get(i).equals(""))
            {
                lakeNameString=lakeNameList.get(i);
            }

        }


        for(int k=0;k<latitudearr.size();k++)
        {
            startPoint=new GeoPoint((int)(latitudearr.get(k) * 1E6),(int)(longitudearr.get(k) * 1E6));

            mapController.animateTo(startPoint);
            overlayItem=new OverlayItem(startPoint, ""+lakeNameList.get(k).toString(),""+lDescription.toString());
            myOverlays.addOverlay(overlayItem);
            mapOverlays.add(myOverlays);
            mapController.setZoom(6);
            mapView.invalidate();
        }

    }

и для показа анимационной части

public void onShowInfo() {

                setContentView(R.layout.tutorial5);
//                  LayoutInflater inflater=(LayoutInflater)FindFishActivity.this.getSystemService( Context.LAYOUT_INFLATER_SERVICE);
//                  View c=inflater.inflate(R.layout.tutorial5,(ViewGroup) findViewById(R.id.linearlayoutID));

                    transparentPanel=(TransparentPanel)findViewById(R.id.popup_window);
                    transparentPanel.setVisibility(View.VISIBLE);
                    transparentPanel.startAnimation(animShow);
                    final Button   hideButton = (Button)findViewById(R.id.hide_popup_button);
                    hideButton.setOnClickListener(new OnClickListener() {

                        public void onClick(View v) {
                            transparentPanel.startAnimation(animHide);
                            transparentPanel.setVisibility(View.GONE);
                            String s=FindFishActivity.this.ongetUrl();
                            new FetchTask(FindFishActivity.this,s).execute(null);

                        }

                    });

1 Ответ

0 голосов
/ 09 августа 2011

Я не думаю, что вам необходимо создавать отдельный макет, т.е. tutorial5.

Для тебя есть другой путь. В вашем mapview добавьте относительный макет и поместите в него содержимое tutorial5 с прозрачностью и всем этим.

Result: Вы получите карту с вашим макетом tutorial5 сверху. Просто спрячь это в начале. когда пользователь нажимает на пин-код, просто установите видимость View.VISIBLE, а после нажатия кнопки останова верните его на View.GONE.

С этой картой все еще будет активна, и вы также можете перемещаться, когда анимация сверху. Дает хороший эффект.

P.S: установите для макета tutorial5 цвет фона #80000000 i.e transparent black. Мне лично это нравится ..:)

...