OkiBry

Untitled

Nov 22nd, 2021
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.62 KB | None | 0 0
  1. package com.example.project.Activity;
  2.  
  3. import androidx.fragment.app.FragmentActivity;
  4.  
  5. import android.graphics.Bitmap;
  6. import android.graphics.BitmapFactory;
  7. import android.graphics.Canvas;
  8. import android.graphics.Color;
  9. import android.graphics.Paint;
  10. import android.os.Bundle;
  11. import android.widget.Toast;
  12.  
  13. import com.google.android.gms.maps.CameraUpdateFactory;
  14. import com.google.android.gms.maps.GoogleMap;
  15. import com.google.android.gms.maps.OnMapReadyCallback;
  16. import com.google.android.gms.maps.SupportMapFragment;
  17. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  18. import com.google.android.gms.maps.model.Circle;
  19. import com.google.android.gms.maps.model.CircleOptions;
  20. import com.google.android.gms.maps.model.LatLng;
  21. import com.google.android.gms.maps.model.MapStyleOptions;
  22. import com.google.android.gms.maps.model.Marker;
  23. import com.google.android.gms.maps.model.MarkerOptions;
  24. import com.example.project.databinding.ActivityMapsBinding;
  25. import com.example.project.R;
  26.  
  27. public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
  28. GoogleMap.OnMarkerClickListener,
  29. GoogleMap.OnCircleClickListener, GoogleMap.OnMapClickListener, GoogleMap.OnMapLongClickListener {
  30.  
  31. private GoogleMap mMap;
  32. private ActivityMapsBinding binding;
  33.  
  34. @Override
  35. protected void onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37.  
  38. binding = ActivityMapsBinding.inflate(getLayoutInflater());
  39. setContentView(binding.getRoot());
  40.  
  41. // Obtain the SupportMapFragment and get notified when the map is ready to be used.
  42. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
  43. .findFragmentById(R.id.map);
  44. mapFragment.getMapAsync(this);
  45.  
  46. }
  47.  
  48. @Override
  49. public void onMapReady(GoogleMap googleMap) {
  50. mMap = googleMap;
  51.  
  52. // Add a marker in Sydney and move the camera
  53. LatLng self = new LatLng(10.762913,106.6821717);
  54. addCircleOnMap(self.latitude, self.longitude, 1000, "Đồ ăn xung quanh HCMUS");
  55.  
  56. // Cần viết thêm class store domain để lưu tọa độ cửa hàng
  57. // Tham số muốn truyền: id cửa hàng và id món ăn
  58. // hàm bên trong sẽ check đẻ hiện lên
  59. // Nếu ID món ăn trống khi dó sẽ load icon cửa hàng và marker link tới view cửa hàng
  60. // Nếu ID cửa hàng trống khi đó sẽ load icon món ăn và marker link tới view 1 món nhiều cửa hàng
  61. // Nếu đầy đủ 2 tham số thì marker link tới view 1 món/ 1 cửa hàng
  62. // marker sử dụng canvas
  63. addFoodMarkerOnMap(10.762913,106.6821717, "Hành của HCMUS");
  64. addFoodMarkerOnMap(10.7568282,106.6796836, "Burger");
  65. addFoodMarkerOnMap(10.7661902,106.6835089, "Chơi đồ án");
  66.  
  67.  
  68.  
  69. mMap.setOnMarkerClickListener(this);
  70. mMap.setOnCircleClickListener(this);
  71. mMap.setOnMapClickListener(this);
  72. mMap.setOnMapLongClickListener(this);
  73.  
  74. mMap.moveCamera(CameraUpdateFactory.newLatLng(self));
  75.  
  76. mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
  77. MapStyleOptions style = MapStyleOptions.loadRawResourceStyle(this, R.raw.map_style);
  78. mMap.setMapStyle(style);
  79. }
  80.  
  81. private Circle addCircleOnMap(double lat, double lng, double radius, String name) {
  82. LatLng position = new LatLng(lat, lng);
  83. CircleOptions circleOptions = new CircleOptions()
  84. .center(position)
  85. .radius(radius)
  86. .clickable(true)
  87. .strokeColor(Color.RED)
  88. .strokeWidth(10f);
  89. Circle circle = mMap.addCircle(circleOptions);
  90. return circle;
  91. }
  92.  
  93. private Marker addFoodMarkerOnMap(double lat, double lng, String name) {
  94. LatLng position = new LatLng(lat, lng);
  95.  
  96. Bitmap.Config conf = Bitmap.Config.ARGB_8888;
  97. int width = 350;
  98. int heigh = 100;
  99. Bitmap bmp = Bitmap.createBitmap(width, heigh, conf);
  100. Canvas canvas1 = new Canvas(bmp);
  101. canvas1.drawColor(Color.GREEN);
  102.  
  103. // paint defines the text color, stroke width and size
  104. Paint color = new Paint();
  105. color.setTextSize(35);
  106. color.setColor(Color.BLACK);
  107.  
  108. // modify canvas
  109. canvas1.drawBitmap(Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(),
  110. R.drawable.bun_cha_cat),100, 100,false), 0,0, color);
  111. canvas1.drawText(name, 100, 40, color);
  112. MarkerOptions markerOptions = new MarkerOptions()
  113. .position(position)
  114. .icon(BitmapDescriptorFactory.fromBitmap(bmp))
  115. .anchor(0.5f, 1);
  116. Marker marker = mMap.addMarker(markerOptions);
  117. return marker;
  118. }
  119.  
  120. @Override
  121. public boolean onMarkerClick(Marker marker) {
  122. Toast.makeText(MapsActivity.this,"Nhấn vào một món ăn để xem chi tiết",Toast.LENGTH_LONG).show();
  123. return false;
  124. }
  125.  
  126. @Override
  127. public void onCircleClick(Circle circle) {
  128. //circle.remove();
  129. }
  130.  
  131. private int NextAvailableID = 1;
  132. @Override
  133. public void onMapClick(LatLng latLng) {
  134. Toast.makeText(MapsActivity.this,"Nhấn vào một món ăn để xem chi tiết",Toast.LENGTH_LONG).show();
  135. }
  136.  
  137. @Override
  138. public void onMapLongClick(LatLng latLng) {
  139. addFoodMarkerOnMap(latLng.latitude, latLng.longitude, String.valueOf(NextAvailableID++));
  140. Toast.makeText(MapsActivity.this,"Tạo view mới thêm món ăn",Toast.LENGTH_LONG).show();
  141. }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment