2016-05-20 11 views
1

Ich arbeite an einem Android-Spiel. Ich versuche, eine Bildansicht von der oberen linken Ecke des Bildschirms mit den Rändern zu positionieren, aber es funktioniert nicht.Android RelativeLayout LayoutParams setMargins (500,500,0,0) Nicht effektiv

Hauptaktivität:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getRealSize(size); 

    RelativeLayout relativeLayout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.MATCH_PARENT 
    ); 
    relativeLayout.setLayoutParams(layoutParams); 
    setContentView(relativeLayout); 
    gameView = new GameView(this, this, size.x, size.y); 
    relativeLayout.addView(gameView); 
... 

Und meine Game Klasse:

public GameBoard (Activity activity, ...) { 
    ... 
    revealItemImageView = new ImageView(activity); 
    revealItemImageView.setImageBitmap(bitmap); 
    RelativeLayout.LayoutParams revealItemLayoutParams = new RelativeLayout.LayoutParams(
     (int)(screenHeight * 0.66), (int)(screenHeight * 0.66)); 
    revealItemLayoutParams.setMargins(500, 500, 0, 0); 
    revealItemImageView.setLayoutParams(revealItemLayoutParams); 
    activity.addContentView(revealItemImageView, revealItemLayoutParams); 
    revealItemImageView.requestLayout(); 

Aber das Bild erscheint rechts oben in der linken oberen Ecke ohne Zwischenraum zwischen den oberen oder der linken Seite. Warum?

+0

Versuchen Zugabe zu dem 'RelativeLayout' statt – Karakuri

+0

Dank für diesen Hinweis. Dies, zusammen mit dem Hinzufügen einer zweiten Inhaltsansicht, war genau das, was ich brauchte. Ich erstelle eine Antwort, damit andere mit dieser Frage den vollständigen Code sehen können. – Joe

Antwort

0

Die Ansicht musste zu einem relativen Layout hinzugefügt werden, und das relative Layout musste als zweite Inhaltsansicht hinzugefügt werden.

Ich habe eine Code-Demonstration in einem eigenen Projekt zusammengestellt. Die beiden Bildansichten haben beide die geeigneten Ränder und überlappen sich geringfügig.

Hier ist der Code in seiner Gesamtheit.

package com.zzzzzzzz.testrelativelayout; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // layer 1 
    RelativeLayout mainActivityContentViewRelativeLayout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams mainActivityContentViewLayoutParams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.MATCH_PARENT 
    ); 
    mainActivityContentViewRelativeLayout.setLayoutParams(mainActivityContentViewLayoutParams); 
    setContentView(mainActivityContentViewRelativeLayout); 

    RelativeLayout.LayoutParams backgroundLayoutParams = new RelativeLayout.LayoutParams(100, 100); 
    backgroundLayoutParams.setMargins(100, 100, 0, 0); 
    ImageView backgroundView = new ImageView(this); 
    backgroundView.setImageResource(R.drawable.item_baby_bottle_b); 
    backgroundView.setLayoutParams(backgroundLayoutParams); 
    mainActivityContentViewRelativeLayout.addView(backgroundView); 

    // layer 2 
    RelativeLayout secondContentViewRelativeLayout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams secondContentViewLayoutParams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.MATCH_PARENT 
    ); 
    secondContentViewRelativeLayout.setLayoutParams(secondContentViewLayoutParams); 
    addContentView(secondContentViewRelativeLayout, secondContentViewLayoutParams); 

    RelativeLayout.LayoutParams itemLayoutParams = new RelativeLayout.LayoutParams(100, 100); 
    itemLayoutParams.setMargins(150, 150, 0, 0); 
    ImageView itemImageView = new ImageView(this); 
    itemImageView.setImageResource(R.drawable.item_diamond_ring_a); 
    itemImageView.setLayoutParams(itemLayoutParams); 
    secondContentViewRelativeLayout.addView(itemImageView); 


} 

}

Verwandte Themen