Android / Java – GoogleMaps上的自定义视图FragmentActivity未显示

我试图在自定义视图中绘制一些Stuff进行测试,该视图被添加到GoogleMaps FragmentActivity中。 但不知何故,当我在模拟器中运行它时,似乎我的CustomView不绘图。我尝试使用新的RelativeLayout和MapLayout。 有任何想法吗 ? 我做错了什么 ?

下面是我的主要GoogleMaps FragmentActivity代码,由Android模板自动生成:

public class GoogleMaps extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.google_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); //RelativeLayout relativeLayout = new RelativeLayout(this); //relativeLayout.addView(new SpriteLayer(this)); MapView map = new MapView(this); map.addView(new SpriteLayer(this)); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Add a marker in Sydney and move the camera LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); } } 

这是我的CustomView代码:

 public class SpriteLayer extends View { Paint paint = new Paint(); public SpriteLayer(Context context) { super(context); setWillNotDraw(false); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int desiredWidth = 100; int desiredHeight = 100; int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int width; int height; //Measure Width if (widthMode == MeasureSpec.EXACTLY) { //Must be this size width = widthSize; } else if (widthMode == MeasureSpec.AT_MOST) { //Can't be bigger than... width = Math.min(desiredWidth, widthSize); } else { //Be whatever you want width = desiredWidth; } //Measure Height if (heightMode == MeasureSpec.EXACTLY) { //Must be this size height = heightSize; } else if (heightMode == MeasureSpec.AT_MOST) { //Can't be bigger than... height = Math.min(desiredHeight, heightSize); } else { //Be whatever you want height = desiredHeight; } //MUST CALL THIS setMeasuredDimension(width, height); } @Override public void onDraw(Canvas canvas) { paint.setColor(Color.GREEN); Rect rect = new Rect(20, 56, 200, 112); canvas.drawRect(rect, paint ); Log.println(Log.ERROR,"Test ","One"); } } 

目前我只看到带有标记的标准地图,仍然没有矩形:(

GMaps

您需要测量所需的视图大小。 你只是传递你收到的东西,可能是0。

另一种选择是使用MATCH_PARENT设置LayoutParams,但我不确定这是否有效。

你想要做的是高级,你应该在尝试之前阅读一些教程。

您有更多信息: https : //developer.android.com/training/custom-views/custom-drawing.html