ImageView setMargins не работает - PullRequest
       2

ImageView setMargins не работает

3 голосов
/ 05 октября 2010

У меня есть FrameLayout, в котором есть 2 изображения: большое, которое заполняет FrameLayout, и очень маленькое, которое я хочу переместить.

Я пытаюсь переместить маленькое, например, это: XML-файл

   <FrameLayout android:id="@+id/layTrackMap"
                      android:layout_width="wrap_content" 
                               android:layout_height="wrap_content"
                               android:visibility="gone">

         <ImageView android:id="@+id/imgTrackMap" 
               android:layout_width="wrap_content" 
               android:layout_height="wrap_content"
               />

         <ImageView android:id="@+id/imgPosition" 
               android:layout_width="wrap_content"
               android:src="@drawable/position" 
               android:layout_height="wrap_content"

               />

         </FrameLayout>   

и код:

imgPosition = (ImageView)findViewById(R.id.imgPosition);

    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);

    //Neither this:
    //lp.setMargins(30, 20, 0, 0);

    //Or this
    lp.leftMargin=30;
    lp.topMargin=80;

    imgPosition.setLayoutParams(lp);

Маленькое изображение не двигается.Я хочу иметь возможность перемещать маленькое изображение в макете.

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: попробовав несколько предложений, я пришел к выводу, что проще сделать пользовательский View и переопределить onDraw, чтобы сделатьработа.

Ответы [ 3 ]

11 голосов
/ 20 октября 2010

Вы также должны установить гравитацию, чтобы использовать поля:

lp.gravity = Gravity.LEFT | Gravity.TOP;
3 голосов
/ 21 июня 2011
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
                    FrameLayout.LayoutParams.WRAP_CONTENT, 
                    FrameLayout.LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.LEFT | Gravity.TOP;
lp.setMargins(left, top, right, bottom);
imgPosition1.setLayoutParams(lp);  

lp = new FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.WRAP_CONTENT, 
                FrameLayout.LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.LEFT | Gravity.TOP;    
lp.setMargins(left, top, right, bottom);
imgPosition2.setLayoutParams(lp); 

мне удалось использовать setMargin, как обычный setPadding .. однако вы должны установить новый параметр макета для каждого imageview, который вы хотите установить для поля

2 голосов
/ 08 октября 2010

Все в FrameLayout зафиксировано в верхнем левом углу и не может быть перемещено, даже путем установки полей.Но вы можете получить тот же результат, используя padding ...

imgPosition.setPadding(30, 80, 0, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...