1. 준비물


먼저 import 해야할 것이 있습니다.


import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
cs


이렇게 해야 좌표를 찍을 수 있습니다. 이걸로 좌표정보인 위도와 경도, 그리고 마커를 조작할 수 있게 됩니다.


2. 코드 구현


좌표를 얻는 코드를 구현하겠습니다.


        googleMap.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener() {
            @Override
            public boolean onMyLocationButtonClick() {
                ReferSharedPreference preferenceCoordinates = new ReferSharedPreference(getContext());
                LatLng point = new LatLng(googleMap.getMyLocation().getLatitude(), googleMap.getMyLocation().getLongitude());
                MarkerOptions marker = new MarkerOptions()
                        .position(point).title("ok");
                preferenceCoordinates.put("Coor", "{ \"longitude\": \""+ googleMap.getMyLocation().getLatitude() +"\",     \"latitude\": \""+ googleMap.getMyLocation().getLongitude() +"\" } ");
                preferenceCoordinates.put("Lat", String.valueOf(googleMap.getMyLocation().getLatitude()));
                preferenceCoordinates.put("Lon", String.valueOf(googleMap.getMyLocation().getLongitude()));
                googleMap.clear();
                googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(point, 14));
                googleMap.addMarker(marker);
                String lat = preferenceCoordinates.getValue("Lat", "13");
                String lon = preferenceCoordinates.getValue("Lon", "15");
                mCoordinatesTextMap.setText(lat + "  , " + lon);
                return true;
            }
        });
cs


이렇게 하면 기본으론 (13, 15) 좌표를 갖는 좌표클릭을 구현하게 되었습니다. 경도와 위도가 바뀌지 않도록 유의합니다.

위에서 변수 지정은 잊지 말아야 합니다. 변수 지정이 조금이라도 잘 못 되면 전체 정보가 왜곡되기 때문입니다.

ReferSharedPreference preferenceCoordinates 는 따로 지정한 DataType 이므로 나중에 다시 지정해야 합니다.


private TextView mCoordinatesTextMap;
cs


이렇게 하면 좌표를 지정할 레이아웃을 가져옵니다.

'Java' 카테고리의 다른 글

[android] Glide와 intent 사용하기  (0) 2018.02.03
[android] 구글맵 3  (0) 2018.02.03
[android] 구글맵 1  (0) 2018.02.03
[android] Fragment 만들기 2-2  (0) 2018.02.03
[android] Fragment 만들기 2-1  (0) 2018.02.03

1. 준비물

구글맵을 넣기 위해선 Activity 에서 해줘야 할 작업이 있습니다. 구글맵은 com.google.android.gms.maps.GoogleMap; 의 형태로 지원됩니다.

 

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
cs


그 후 작업을 하면 됩니다. 이 경우에도 변수에 유의해야 합니다.

 

public class BlueFragment extends Fragment implements OnMapReadyCallback {
 
    public GoogleMap googleMap;
}
cs


이렇게 구글맵을 따로 잡아줘야 합니다. GoogleMap이라는 변수를 사용했습니다.

레이아웃을 불러오겠습니다.


2. 레이아웃 불러오기



    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
 
        View view = inflater.inflate(R.layout.fragment_blue, container, false);
        MapView mapview = (MapView) view.findViewById(R.id.map_blue);
        mapview.onCreate(savedInstanceState);
        mapview.onResume();
        mapview.getMapAsync(this);
 
        mCoordinatesTextMap = (TextView) view.findViewById(R.id.tv_coordinates_map);
 
        return view;
    }
 
cs


이렇게 onCreateView를 구현합니다. 단순히 mapview를 view.findViewById로 가져오는 것이 아닙니다. 

인자로 R.layout.fragment_blue, container, false를 사용했다는 것을 명심해야 합니다.


3. 구글맵 사용자 권한 설정


    @Override
    public void onMapReady(final GoogleMap googleMap) {
 
        int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),
                Manifest.permission.READ_EXTERNAL_STORAGE);
 
        if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
            googleMap.setMyLocationEnabled(true);
        } else {
            ActivityCompat.requestPermissions(getActivity(),
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    2000);
        }
}
cs


권한 획득을 하는 곳까지 구현했습니다.

구글맵 사용시 위치정보 사용권한을 사용자에게 묻는 코드입니다. 더 궁금하다면 Manifest.permission.READ_EXTERNAL_STORAGE에서 추가 내용을 확인합니다.

'Java' 카테고리의 다른 글

[android] 구글맵 3  (0) 2018.02.03
[android] 구글맵 2  (0) 2018.02.03
[android] Fragment 만들기 2-2  (0) 2018.02.03
[android] Fragment 만들기 2-1  (0) 2018.02.03
[android] Fragment 만들기1  (0) 2018.02.03

1. 목표


이번엔 단순하게 onClickListener를 이용해서 구현해보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class MainActivity extends FragmentActivity {
 
    private ImageView btn_red;
    private ImageView btn_blue;
    private ImageView btn_yellow;
    private ImageView btn_green;
 
    private ViewPager vp_pager;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        vp_pager = (ViewPager) findViewById(R.id.vp_pager);
 
        Fragment[] arrFragmnets = new Fragment[4];
        arrFragmnets[0= new YellowFragment();
        arrFragmnets[1= new RedFragment();
        arrFragmnets[2= new GreenFragment();
        arrFragmnets[3= new BlueFragment();
 
        MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), arrFragmnets);
        vp_pager.setOffscreenPageLimit(4);
        vp_pager.setAdapter(adapter);
 
 
        btn_blue = (ImageView) findViewById(R.id.btn_blue);
        btn_red = (ImageView) findViewById(R.id.btn_red);
        btn_yellow = (ImageView) findViewById(R.id.btn_yellow);
        btn_green = (ImageView) findViewById(R.id.btn_green);
 
        btn_yellow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                vp_pager.setCurrentItem(0);
            }
        });
        btn_red.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                vp_pager.setCurrentItem(1);
            }
        });
        btn_green.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                vp_pager.setCurrentItem(2);
            }
        });
        btn_blue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                vp_pager.setCurrentItem(3);
            }
        });
       
        // 여기서 setCurrentItem()가 pager에 연결되어 사용되었다.
    }
}
cs



이렇게 하게되면 굳이 switch()구문을 이용하지 않아도 구현이 가능합니다. 대신에 arrFragment[] array를 주의해야 합니다.

위의 코드는 자연스럽게 setOnClickListener()를 쓰기 때문에 기본적인 기술만으로 구현이 가능하다는 장점이 있습니다.

하지만 일일이 다 만들어줘야 하기 때문에 Fragment가 많아지면 복잡해진다는 단점이 있습니다. Fragment를 사용할 땐 pager가 잘 쓰입니다. pager는 setCurrentItem() 함수와 같이 현재 Fragment의 정보를 불러오는 기능을 가능하게 해줍니다. Fragment의 정보를 일종의 page처럼 다룹니다.


추가로 레이아웃에선 이런 코드가 있을 수 있습니다.


2. 레이아웃 예시


    <fragment
        android:id="@+id/fragment_row"
    android:layout_weight="9"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:name="com.example.keepair.myapplication.RowFragment"
    tools:layout="@layout/fragment_row"></fragment>
cs

이 코드는 fragment의 레이아웃을 지정하는 코드입니다. weight가 9로 설정되어 있음을 확인할 수 있습니다. 그리고 fragment에도 id 값을 부여할 수 있습니다. 


다음에 이어서 올리겠습니다.


'Java' 카테고리의 다른 글

[android] 구글맵 3  (0) 2018.02.03
[android] 구글맵 2  (0) 2018.02.03
[android] 구글맵 1  (0) 2018.02.03
[android] Fragment 만들기 2-1  (0) 2018.02.03
[android] Fragment 만들기1  (0) 2018.02.03

+ Recent posts