Как нарисовать ImageView в середине экрана?(Программно) - PullRequest
0 голосов
/ 03 октября 2011

Я хочу нарисовать простой ImageView в середине экрана, по горизонтали и вертикали.Но я хочу сделать это без использования XML-файлов, мне нужно сделать это программно.

Я попробовал следующий код, но он не работает нормально, он рисует изображение немного вправо инемного до дна.Как это решить?

    ARImage = new ImageView(getApplicationContext());
    ARImage.setImageResource(R.drawable.x);
    rl.addView(ARImage); //rl is the relative layout that it's inserted into a frame layout

    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    int w = display.getWidth();
    int h = display.getHeight();
    RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    position.leftMargin = (int)(w/2);
    position.topMargin  = (int)(h/2);
    ARImage.setLayoutParams(position);

Ответы [ 4 ]

2 голосов
/ 03 октября 2011

У меня это работает так:

package pete.android.study;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Display;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;


public class Main extends Activity {

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ImageView ARImage = new ImageView(getApplicationContext());
        ARImage.setImageResource(R.drawable.icon);
        RelativeLayout rl = new RelativeLayout(this);
        Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        int w = display.getWidth();
        int h = display.getHeight();
        RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        ARImage.setLayoutParams(position);  

        position.addRule(RelativeLayout.CENTER_IN_PARENT);
        rl.addView(ARImage, position);  
        setContentView(rl); 
    }

}
1 голос
/ 03 октября 2011

Попробуйте использовать

position.leftMargin = (int)(w/2 - whalf);
position.topMargin  = (int)(h/2 - hhalf);

, где whalf и hhalf - это половина параметров вашего изображения.

0 голосов
/ 03 октября 2011

Зная, что он находится внутри RelativeLayout, вы можете разместить его в центре этого макета:

  RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  lp.addRule(RelativeLayout.CENTER_IN_PARENT);
  rl.addView(ARImage, lp);
0 голосов
/ 03 октября 2011

Не думаю, что вы можете установить левое и верхнее поле следующим образом:

position.leftMargin = (int)(w/2);
position.topMargin  = (int)(h/2);

Попробуйте установить поля следующим образом:

position.setMargins((int)(w/2), (int)(h/2), 0, 0); // left, top, right, bottom
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...