Центрирование пользовательского представления в RelativeLayout с использованием LayoutParams - PullRequest
2 голосов
/ 03 марта 2012

Я пытаюсь центрировать пользовательский вид в относительной компоновке.Это изображение вращается, поэтому оно должно находиться в центре макета, чтобы оно не выходило за границы макета.Прямо сейчас его отображение в левом верхнем углу.Вот мой код:


container = (RelativeLayout) findViewById(R.id.lay_container);

bmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.charlie_sheen);

rotate_view = new RotationView(this, bmap);

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

params.addRule(RelativeLayout.CENTER_IN_PARENT);

rotate_view.setLayoutParams(params);
container.addView(rotate_view);

Вот мой относительный формат XML

 <RelativeLayout
            android:id="@+id/lay_container"
            android:layout_width="200dip"
            android:layout_height="200dip"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/txt_1"
            android:layout_marginRight="45dp"
            android:layout_marginTop="56dp" 
            android:padding="10dip" />

У вас есть идеи?Я знаю, что, возможно, есть простое решение этой проблемы, но я не могу найти ответ.Установив параметр LayoutParameter в центр, вы должны центрировать вид в слое, верно?

Заранее благодарим за любую помощь или предложения

Ответы [ 2 ]

2 голосов
/ 03 марта 2012

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

Вариант 1: использовать явную форму addRule(), т.е.

params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);

Вариант 2. Используйте явную форму addView() и не устанавливайте параметры в самом представлении, т.е.

//Omit the line above this one
container.addView(rotate_view, params);

Помимо этого, возможно, некоторое понимание пользовательского представления, в частности, как оно измеряет себя (оно не пытается заполнить родителя, не так ли)?

НТН

0 голосов
/ 05 марта 2012

Хорошо, Devunwired. Я сделаю это.

Вот как я сейчас центрирую изображение.

1) Я центрирую изображение на холсте, используя свойство BitmapDrawable setGravity (Gravity.CENTER).

2) Я центрирую RotationView в моей Относительной компоновке:

 <RelativeLayout
   android:id="@+id/image_container"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_below="@+id/txt_1"
   android:layout_centerHorizontal="true" >

    <com.mobicartel.acceldatatester.RotationView
       android:id="@+id/rotate_view"
       android:layout_centerInParent="true"
       android:layout_height="wrap_content"
       android:layout_width="wrap_content" />

</RelativeLayout>

Я добавлю фон и дам вам знать. (Прямо сейчас изображение не отображается вообще. Иногда вам нужно сделать шаг назад, чтобы сделать два в правильном направлении!)

...