2013-09-26 3 views
0

У меня есть этот макетAndroid: Изменение размера View без потери позиции

<RelativeLayout 
     android:id="@+id/gameportView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <com.pepotegames.spotthedifferences.DifferenceView 
      android:id="@+id/imageA" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_above="@+id/progressBar1" 
      android:layout_centerHorizontal="true" /> 

     <ProgressBar 
      android:id="@+id/progressBar1" 
      style="?android:attr/progressBarStyleHorizontal" 
      android:layout_width="match_parent" 
      android:layout_height="16dp" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:max="1000" 
      android:progress="0" /> 

     <com.pepotegames.spotthedifferences.DifferenceView 
      android:id="@+id/imageB" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/progressBar1" 
      android:layout_centerHorizontal="true" /> 

    </RelativeLayout> 

Как вы можете видеть, imageA и imageB позиционируются относительно моей ProgressBar. Проблема в том, что мне нужно изменить размер ProgressBar во время выполнения. Для этого у меня есть пользовательский прослушиватель, который запускается при вызове моего настраиваемого метода View onSizeChanged.

imageA.setOnSizeChangedLister(new DifferenceView.OnSizeChangedListener(){ 
     @Override 
     public void onResize(){ 
      level.scaleBy(imageA.getScale()); 

      bar.setLayoutParams(new RelativeLayout.LayoutParams(imageA.getWidth(),bar.getHeight())); 
     } 
    }); 

Все работает отлично, за исключением того, что я передал набор новых LayoutParams в мой бар. Итак, как я могу изменить размер этого шага прогресса без потери атрибутов android: layout_centerHorizontal = "true" и android: layout_centerVertical = "true"?

ответ

0

Используйте следующую -

imageA.setOnSizeChangedLister(new DifferenceView.OnSizeChangedListener(){ 
    @Override 
    public void onResize(){ 
     level.scaleBy(imageA.getScale()); 

     RelativeLayout.LayoutParams existingLayoutParams = ((RelativeLayout.LayoutParams) bar.getLayoutParams()); 
     existingLayoutParams.width = imageA.getWidth(); 
     existingLayoutParams.height = imageA.getHeight(); 
     bar.setLayoutParams(existingLayoutParams); 
    } 
}); 
0

Вместо создания новых LayoutParams попробуйте извлечь текущие LayoutParams View, используя getLayoutParams, а затем отредактируйте желаемые значения.

Смежные вопросы