2017-02-10 6 views
1

Im пытается нарисовать некоторые предметы для тестирования в пользовательском представлении, который добавляется в GoogleMaps FragmentActivity. Но почему-то, когда я запускаю его в эмуляторе, кажется, что мой CustomView isnt drawing.I попробовал его с новым RelativeLayout и MapLayout. Есть идеи ? Что я сделал не так ?Android/Java - Пользовательский вид на GoogleMaps FragmentActivity не показан

Heres мой Главная 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

ответ

1

Вам необходимо измерить желаемый размер вашего вида. Вы просто передаете то, что получаете, что, вероятно, равно 0.

Другой вариант - установить LayoutParams с MATCH_PARENT, но я не уверен, что это сработает.

Все, что вы пытаетесь сделать, продвинуто, вы должны прочитать некоторые уроки, прежде чем пытаться это сделать.

У вас есть дополнительная информация: https://developer.android.com/training/custom-views/custom-drawing.html

+0

Спасибо за ваш быстрый ответ! Я посмотрел на него и сделал несколько попыток. Не работает. Как добавить пользовательский вид? Или есть логическая ошибка. Я не нашел много статей об этом. Также я отредактировал свой вопрос немного :) – genaray

+0

Вы все еще вызываете super.onMeasure с полученными параметрами. Вам не нужно называть это. – jonathanrz

+0

Итак, я удалил его и снова проверил, ничего: - /. Любые другие идеи? – genaray