java - Android/Java - 未显示 Google Maps FragmentActivity 上的自定义 View

标签 java android google-maps android-fragments libgdx

我试图在自定义 View 中绘制一些用于测试的东西,该 View 已添加到 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");
}
}

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

GMaps

最佳答案

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

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

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

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

关于java - Android/Java - 未显示 Google Maps FragmentActivity 上的自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42163321/

相关文章:

java - Android:为什么后续代码阻止 TextView 的 .setText() 工作

java - 带 TextChangedListener 的 RetroLambda

java - 如何调用一个类中已在另一个类中创建的对象?

android - 如何获取正在运行的应用程序列表?

同一设备中的 Android 客户端服务器应用程序

ios - 无法将 'NSTaggedPointerString' 类型的值转换为 Google Place Api 中的“NSArray”

ios - Google MAP iOS 卫星 View 现在太阴了

java - 禁用 Spring Boot HibernateJpaAutoConfiguration 但仍然收到相关错误

java - 如果没有 android studio,应用程序无法运行

android - Android捕获内部(应用程序)音频